sql >> Databáze >  >> RDS >> Mysql

PŘEPNOUT s LIKE uvnitř SELECT dotazu v MySQL

Mysql podporuje dvě varianty případu, ta, kterou používáte v dotazu 2, je méně flexibilní, ale podporuje pouze rovnost na jedné proměnné. Druhá verze nespecifikuje žádnou proměnnou za případem a pak podmínky nemusí být pouze rovnost:

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%"

Viz dokumentace pro další podrobnosti

EDIT:Zde je trochu více vysvětlení, proč váš dotaz č. 1 vrátil to, co vrátil:

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

očekává, že dostane doslovnou hodnotu pro srovnání mezi when ... then Ve výše uvedeném případě výrazy tag LIKE "%class%" , tag LIKE "%new%" a tag LIKE "%pack%" jsou všechny vyhodnoceny před skutečným porovnáním velkých a malých písmen. Stane se však (!), že se stanou buď 0, nebo 1 a při porovnání s hodnotou tagu je to první hodnota 0, která bude odpovídat jakémukoli znaku (znak bude přetypován na 0) – to je v souladu s výsledky vašeho prvního dotazu.

Zde je dotaz, který ukazuje logické hodnoty pro relevantní výrazy:

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%";

To je důvod, proč získáte neočekávané výsledky; tichý CAST je zde standardním úskalím.



  1. Nejrychlejší způsob importu velkého souboru CSV do MySql pomocí MySql CLI

  2. SQL:výběr řádků, kde se hodnota sloupce změnila oproti předchozímu řádku

  3. Jak upravit uloženou proceduru v Oracle SQL Developer?

  4. Jak extrahovat nebo převádět časová data z řetězce v SQL Server