2016-03-02 41 views
1

是否有可能找到commmafind_in_set如何用mysql查找逗號find_in_set

我想:

select find_in_set('\,', '\,'); 

我的使用情況是:

where find_in_set(r.tag, vfilterList) 

這裏,vfilterList是作爲輸入提供存儲過程的逗號分隔的列表 - 和r.tag是標記字符串在桌子裏。 (所以我想過濾只有在vfilterList中有一個標籤的行)。然而一些標籤字符串中有逗號。 (在vfilterList標籤中的逗號將被轉義?)。

東西告訴我我做錯了嗎?

+0

我不認爲這是可能的。 – Barmar

+1

只是表格列中不使用逗號分隔列表的衆多原因之一。 – Barmar

+0

逗號分隔列表來自另一個系統,並且是存儲過程的輸入變量。 –

回答

2

不,這是不可能的。

該文檔特別指出,這是行不通的。

如果第一個參數包含逗號(「,」)字符,則此函數無法正常工作。

http://dev.mysql.com/doc/refman/5.7/en/string-functions.html#function_find-in-set

的功能被設計爲返回一個子串的順序位置,用逗號分隔。根據定義,從根本上說,它永遠不會找到任何帶有逗號的東西,因爲它只考慮它們之間的值。

根據您實際嘗試完成的工作,INSTR()SUBSTRING_INDEX()可能會有用。

0

結束了,只是用管道替換逗號。 (並對過濾器列表中的每個標籤執行相同操作)。對於我們的用例來說,這是非常不準確的,誤報率也不太可能。

where find_in_set(replace(r.tag,",","|"), vfilterList) 
+1

非常感謝Robert!這拯救了我的生命。我幾乎殺了我的頭,想弄清楚如何解決它。 :) – user3304007