1. 程式人生 > >mysql的CONCAT函式和CONCAT_WS函式

mysql的CONCAT函式和CONCAT_WS函式

博主要做一個mysql資料庫的同key值但是多條件(欄位)模糊查詢,查閱資料發現CONCAT可以實現,將多個欄位放入CONCAT()函式體內就好,用‘,’隔開。

後來發現一個bug,輸入查詢條件,明明資料庫存在確搜尋不到任何結果!很是鬱悶,才知道CONCAT函式是將多個欄位拼接在一起,但是如果有一個欄位是null則直接返回null,這樣當然是不能完成需求的。

最初始的sql:

sql = "SELECT * FROM company WHERE CONCAT(CompanynameChinese,Delegate,strategy) LIKE %s order by IsId desc limit %s ,%s"

查資料發現還有一個CONCAT_WS函式:

=====》是這麼介紹的使用函式CONCAT_WS()。使用語法為:CONCAT_WS(separator,str1,str2,…)
CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一個引數是其它引數的分隔符。分隔符的位置放在要連線的兩個字串之間。分隔符可以是一個字串,也可以是其它引數。如果分隔符為 NULL,則結果為 NULL。函式會忽略任何分隔符引數後的 NULL 值。但是CONCAT_WS()不會忽略任何空字串。 (然而會忽略所有的 NULL)。

說了這麼多,重點來了,會忽略所有的 NULL

更改後的sql:

sql = "SELECT * FROM company WHERE CONCAT_WS(CompanynameChinese,'_',Delegate,'_',strategy) LIKE %s order by IsId desc limit %s ,%s"

這樣任何一個欄位在資料庫為null也不影響查詢啦~