Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

BERALIH dengan LIKE di dalam kueri SELECT di MySQL

Mysql mendukung dua varian kasus, yang Anda gunakan dalam kueri 2 kurang fleksibel tetapi hanya mendukung kesetaraan pada satu variabel. Versi lain tidak menentukan variabel setelah kasus dan kemudian kondisi tidak perlu hanya kesetaraan:

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

Lihat dokumentasi untuk keterangan lebih lanjut

EDIT:Inilah sedikit penjelasan lebih lanjut tentang mengapa kueri Anda #1 mengembalikan apa yang dikembalikan:

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

mengharapkan untuk mendapatkan nilai literal untuk perbandingan antara when ... then Dalam kasus di atas ekspresi tag LIKE "%class%" , tag LIKE "%new%" dan tag LIKE "%pack%" semuanya dievaluasi sebelum perbandingan kasus yang sebenarnya. Namun (!), apa yang terjadi adalah bahwa mereka menjadi 0 atau 1 dan bila dibandingkan dengan nilai tag itu adalah nilai pertama 0 yang akan cocok dengan karakter apa pun (char akan dilemparkan ke 0) - ini konsisten dengan hasil kueri pertama Anda.

Berikut adalah kueri yang menunjukkan nilai logika untuk ekspresi yang relevan:

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

Itu sebabnya Anda mendapatkan hasil yang tidak terduga; CAST diam adalah perangkap standar di sini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih 5 baris terbaru berdasarkan tanggal

  2. Bagaimana menghubungkan ke MySQL menggunakan PHP

  3. PHP dan mod_dbd

  4. SQLSTATE[42000]:Kesalahan sintaks atau pelanggaran akses:1064

  5. mysql_real_escape_string VS menambahkan bulu mata