有没有办法做这样的事情?
SELECT * FROM tablename WHERE x CONTAINS "1"
基本上,我想从数据库中选择x包含特定数字的数据。问题是,任何行中的x列都可以包含“1,2,3”,我想选择所有包含1的内容,特别是1,而不是11或包含1的任何内容,但特别是1。
以下是一个例子:
id title x
-------------------
1 row1 1,22,3
2 row2 1,5
3 row3 5,91
4 row4 70
我希望我的查询返回第1行和第2行。我不想要第3行,因为1在数字91内。我不想要第4行,因为那里也没有第1行。
答案 0 :(得分:2)
您可以像这样使用FIND_IN_SET函数:
SELECT * FROM tablename WHERE FIND_IN_SET('1', x)
如果您在SET类型上调用它,也会优化使用位运算。
答案 1 :(得分:1)
理想情况下,您可以将“x”列标准化为单独的表格。
但是......你也可以像这样破解它:
SELECT * FROM tablename WHERE x LIKE '%,1' OR x LIKE '1,%' OR x LIKE '%,1,%'
这基本上只处理三种不同的情况,其中“1”是列表中的第一个,最后一个或中间元素。 (请注意,如果你的逗号后面有空格,你可以将最后一部分更改为'%,1,%'
编辑:实际上Dmitriy的REGEXP更好,而且'FIN的FIND_IN_SET看起来很理想。
答案 2 :(得分:1)
你可以试试这个:
SELECT * FROM tablename WHERE x REGEXP "(^|,)1(,|$)"