簡體   English   中英

如何選擇列包含的行

[英]How do I select rows where a column contains

這是我表中的字段

service_field

我如何選擇列僅包含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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM