2012-05-17 50 views
1

我正在創建一個「簡單」搜索查詢。如果指定的列LIKE('test'),我想選擇一個值爲1的列,這很難解釋。CASE zip like MySQL

我想要做的就是這樣的

SELECT *,(CASE mycol LIKE('%test%') as match THEN 1 END) FROM mytable 

所以,如果mycol的條件相匹配,然後匹配= 1,如果否則爲0。我會怎麼做呢?對不起,如果很難理解。

回答

2

就快成功了,但你已經做了四個錯誤和使用的一個壞習慣:

  • 添加ELSE 0在你的CASE表達式。
  • CASE表達式需要一個或多個WHEN表達式。
  • 將別名放在正確的位置 - 表達式結束後。
  • 請勿使用reserved wordmatch作爲別名。

另外,請勿使用SELECT *

試試這個:

SELECT 
    col1, 
    col2, 
    ..., 
    coln, 
    CASE WHEN mycol LIKE '%test%' THEN 1 ELSE 0 END AS zipmatches 
FROM mytable 

但是沒有必要因爲真正在MySQL中CASE表達式和1是相同的:

SELECT 
    col1, 
    col2, 
    ..., 
    coln, 
    mycol LIKE '%test%' AS zipmatches 
FROM mytable 
+0

一點也沒有't work :( 查看查詢: SELECT zip LIKE'%falun%'as match F ROM客戶 錯誤:您的SQL語法中有錯誤 –

+0

@AntonGildebrand:'匹配'必須包含反引號以將其用作別名,因爲它是保留字。看到這個小提琴顯示它的工作:http://sqlfiddle.com/#!2/174f2/2 –

+0

它工作時,我刪除「作爲匹配」。否則它只會引發一般性錯誤 –

1

這裏是另一種表達

SELECT *, IF(mycol LIKE('%test%'),1,0) is_a_match FROM mytable;