如何选择列所包含的行

时间:2011-08-26 01:50:25

标签: mysql sql

这是我表格中的字段

service_field

如何选择列中仅包含5而不是15的行 如果SELECT * FROM供应商WHERE服务LIKE '%5%',它将选择也有15个。 任何想法?

6 个答案:

答案 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,%'