我有这张表,想选择正好包含“22”的行。
id field
1 22
2 22,24,78
3 1,22,347
4 2,21,22
5 22,222
选择上面的行,而不是下面。
6 222
7 21,23
8 220,322
运算符在这里REGEXP派上用场:
SELECT *
FROM yourTable
WHERE field REGEXP '[[:<:]]22[[:>:]]';
我们也可以尝试使用FIND_IN_SET:
SELECT *
FROM yourTable
WHERE FIND_IN_SET('22', field) > 0;
如果一切都失败了,我们可以使用LIKE,但它需要稍微繁重的工作:
SELECT *
FROM yourTable
WHERE CONCAT(',', field, ',') LIKE '%,22,%';
但一般来说,将 CSV(逗号分隔值)存储在数据库表中是不好的做法。最好将每个field值存储在单独的行中,例如使用:
id field
1 22
2 22
2 24
2 78
...
select * from where field like '%22%';