Mysql
 sql >> база данни >  >> RDS >> Mysql

SWITCH с LIKE вътре в заявката SELECT в MySQL

Mysql поддържа два варианта на регистри, този, който използвате в заявка 2, е по-малко гъвкав, но поддържа само равенство на една променлива. Другата версия не посочва променлива след случай и тогава условията не трябва да са само равенство:

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

Вижте документацията за повече подробности

РЕДАКТИРАНЕ:Ето малко повече обяснение защо вашата заявка №1 е върнала това, което е върнала:

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

очаква да получи буквална стойност за сравнение между when ... then В горния случай изразите tag LIKE "%class%" , tag LIKE "%new%" и tag LIKE "%pack%" всички се оценяват преди действителното сравнение на случаите. Въпреки това (!), това, което се случва е, че те стават или 0, или 1 и когато се сравняват със стойността на маркера, първата стойност на 0 ще съответства на всеки char (char ще бъде прехвърлен на 0) – това е в съответствие с резултатите от първата ви заявка.

Ето заявка, която показва логическите стойности за съответните изрази:

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

Ето защо получавате неочаквани резултати; безшумното CAST е стандартен капан тук.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Извличане на координатите на типа MySQL точка

  2. Грешка при вмъкване на PHP/SQL при използване на именувани заместители

  3. как да преброите появата на дума в няколко реда на mysql db

  4. MySQL стойности на разделени колони за използване в подзаявка?

  5. Актуализирайте стойностите в Mysql timestamp до стойност за дата и час.