这是我表格中的字段
如何选择列中仅包含5而不是15的行
如果SELECT * FROM
供应商WHERE
服务LIKE '%5%'
,它将选择也有15个。
任何想法?
答案 0 :(得分:5)
正如其他评论所述,规范化您的数据库。但是,这是一个暂时得到你正在寻找的东西:
select * from vendor where ',' + services + ',' like '%,5,%'
答案 1 :(得分:1)
从供应商中选择*,其中services ='5'或服务LIKE'5,%'或服务如'%,5'或服务LIKE'%,5,%'
但严重规范化数据库
答案 2 :(得分:1)
您可以使用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,'
答案 3 :(得分:1)
实际上,MySQL为这些以逗号分隔的字符串提供FIND_IN_SET
function。这比复杂的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)
但仍要注意 - 这样的设计可能导致性能低下。
答案 4 :(得分:0)
使用regexp:
SELECT * FROM `VENDOR` WHERE `services` REGEXP '[[:<:]]5[[:>:]]';
(我最近在Match tags in MYSQL)
中回答了这个问题答案 5 :(得分:0)
您可以在where
条件下执行services='5' or services like '%,5' or services like '%,5,%' or services like '5,%'