这个问题在这里已有答案:
我有这个表,并希望选择包含“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
select * from where field like'%22%';
REGEXP 运算符在这里派上用场:
REGEXP
SELECT * FROM yourTable WHERE field REGEXP '[[:<:]]22[[:>:]]';
我们也可以尝试使用 FIND_IN_SET :
FIND_IN_SET
SELECT * FROM yourTable WHERE FIND_IN_SET('22', field) > 0;
如果所有其他方法都失败了,我们可以使用 LIKE ,但需要稍微提升一些:
LIKE
SELECT * FROM yourTable WHERE CONCAT(',', field, ',') LIKE '%,22,%';
但总的来说,在数据库表中存储CSV(逗号分隔值)是不好的做法 . 最好将每个 field 值存储在单独的行上,例如用这个:
field
id field 1 22 2 22 2 24 2 78 ...
2 回答
select * from where field like'%22%';
REGEXP
运算符在这里派上用场:我们也可以尝试使用
FIND_IN_SET
:如果所有其他方法都失败了,我们可以使用
LIKE
,但需要稍微提升一些:但总的来说,在数据库表中存储CSV(逗号分隔值)是不好的做法 . 最好将每个
field
值存储在单独的行上,例如用这个: