sql >> Database >  >> RDS >> Mysql

SWITCH met LIKE in SELECT-query in MySQL

Mysql ondersteunt twee varianten van hoofdletters, degene die u gebruikt in query 2 is minder flexibel, maar ondersteunt alleen gelijkheid op een enkele variabele. De andere versie specificeert geen variabele na hoofdletters en dan hoeven de voorwaarden niet alleen gelijkheid te zijn:

select id_tag,
case  
   when tag LIKE "%class%" then "class" 
   when tag LIKE "%new%" then "new"
   when tag LIKE "%pack%" then "pack"
end as matching_tag 
from Tags 
where tag LIKE "%class%" OR tag LIKE "%new%" OR tag LIKE "%pack%"

Zie documentatie voor meer details

EDIT:Hier is een beetje meer uitleg over waarom uw zoekopdracht #1 heeft opgeleverd wat het heeft opgeleverd:

case tag
   when tag LIKE "%class%" then "class" 
   when tag LIKE "%new%" then "new"
   when tag LIKE "%pack%" then "pack"
end as matching_tag

verwacht een letterlijke waarde te krijgen voor vergelijking tussen when ... then In het bovenstaande geval de uitdrukkingen tag LIKE "%class%" , tag LIKE "%new%" en tag LIKE "%pack%" worden allemaal geëvalueerd vóór de feitelijke vergelijking van de hoofdletters. Maar (!), Wat er gebeurt, is dat ze 0 of 1 worden en in vergelijking met de waarde van de tag is het de eerste waarde van 0 die overeenkomt met elke char (char wordt gecast naar 0) - dit komt overeen met de resultaten van uw eerste zoekopdracht.

Hier is een query die de logische waarden voor de relevante expressies toont:

select id_tag, tag LIKE "%class%", tag LIKE "%new%", tag = 0, case tag     when tag LIKE "%class%" then "class"     when tag LIKE "%new%" then "new"    when tag LIKE "%pack%" then "pack" end as matching_tag  from Tags  where tag LIKE "%class%" OR tag LIKE "%new%" OR tag LIKE "%pack%";

Daarom krijg je onverwachte resultaten; de stille CAST is hier een standaard valkuil.



  1. Hoe gegevens exporteren van Oracle SQL Developer naar Excel?

  2. Database-automatisering achter de nieuwe elektronische identiteit van Zweden Freja eID

  3. Een tabel op de verkeerde manier renderen:kolommen en rijen transponeren?

  4. De verbindingstijdzone wijzigen in MySQL