[英]How do I select rows where a column contains
這是我表中的字段
我如何選擇列僅包含5的行,如果SELECT * FROM
供應商WHERE
服務LIKE '%5%'
那么它將選擇15的行。 任何想法?
如其他注釋所述,對數據庫進行規范化。 但是,這是一種臨時獲取您所尋找內容的技巧:
select * from vendor where ',' + services + ',' like '%,5,%'
從供應商處選擇*服務='5'或服務類似'5,%'或服務類似'%,5'或服務類似'%,5,%'
但是認真規范數據庫
您可以使用regexp
:
select * from my_table
where
my_col regexp '^5$' or
my_col regexp ',5$' or
my_col regexp ',5,';
我自己還沒有嘗試過上面的表達式,但是類似的方法會起作用。
編輯:與一個正則表達式:
select * from my_table
where
my_col regexp '^5$|,5$|,5,'
實際上,MySQL為此類逗號分隔的字符串提供了FIND_IN_SET
函數 。 這比復雜的like
或正則表達式解決方案更簡單,更干凈:
mysql> select * from vendor where find_in_set('5', services) > 0;
+----+----------+
| id | services |
+----+----------+
| 1 | 5 |
| 3 | 9,5 |
+----+----------+
2 rows in set (0.00 sec)
但請注意-這樣的設計可能會導致性能降低。
使用正則表達式:
SELECT * FROM `VENDOR` WHERE `services` REGEXP '[[:<:]]5[[:>:]]';
(我最近在MYSQL的Match標簽中回答了這個問題)
where
條件允許的情況下,您可以編寫services='5' or services like '%,5' or services like '%,5,%' or services like '5,%'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.