2017-08-10 103 views
0

這是tableMYSQL使用REGEXP

ID | Amount 
---|--- 
0 | 1,2,3 
1 | 11,12,13 
2 | 21,23 
3 | 2,3 

細胞可以有任意數量的由逗號分隔的任何數字。我需要選擇其中包含金額的行。由於MYSQL REGEXP不支持lookaheads/lookbehinds,所以我需要一個合適的regex表達式來實現這一點。如果有更有效的解決方案而不是正則表達式,我願意接受建議。

實現這一目標的一個小白方式是

SELECT * FROM table WHERE 
(Amount LIKE '2' OR Amount LIKE '%,2' OR Amount LIKE '2,%' OR Amount LIKE '%,2,%) 

,但我寧願避免這種情況。

回答

1

你可以只使用FIND_IN_SET()這裏:

SELECT * 
FROM table 
WHERE FIND_IN_SET('2', Amount) > 0 

FIND_IN_SET()搜索的第一個參數的CSV列表作爲第二個參數。它處理了試圖通過逗號查找數據的混亂情況。話雖如此,你通常應該避免在表格中使用CSV,這是因爲它使查詢變得困難並且性能不理想。最好將你的表格標準化,並將每一筆金額記錄在與給定的ID相關聯的單獨記錄中。

輸出:

enter image description here

演示在這裏:

Rextester

+0

這是偉大的!當我使用分隔的Amount值設計表格時,我沒有意識到使用FIND_IN_SET()讓我的生活變得如此簡單。感謝您指出!所以,你所說的是,有可能有10-15倍大的表更有效率,但具有唯一的金額值,而不是在單個單元中排列金額?鑑於表中有成千上萬的行,這將工作得更快 - FIND_IN_SET()或4 LIKE查詢在我的問題? – Aydin4ik