如何选择行,其中一列包含
问题描述:
答
使用正则表达式:
SELECT * FROM `VENDOR` WHERE `services` REGEXP '[[:<:]]5[[:>:]]';
(我刚刚在Match tags in MYSQL回答了这个)
答
正如其他评论指出的,规范化你的数据库。但是,这里有一个黑客,让你在找什么暂时:
select * from vendor where ',' + services + ',' like '%,5,%'
答
SELECT * FROM供应商那里服务='5'或服务LIKE'5,%'或服务如'%,5'或服务LIKE'%,5,%'
但严重标准化DB
答
你可以做什么是where
条件,你可以写services='5' or services like '%,5' or services like '%,5,%' or services like '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
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)
但还是要小心 - 这样的设计可能会导致低性能。
如果您可以控制数据库结构,则需要[标准化](http://en.wikipedia.org/wiki/Database_normalization)。 – BoltClock
正常吗? – Randy