我有一个表,其中的一列以以下方式存储数据。
| column1 |
+----------------+
| [112,114] |
| [112,115] |
| [112,114] |
| [] |
| [112] |
| [] |
| [116] |
| [114,115,116] |
我希望能够选择该表的记录,其中一条记录可能具有存储在column1字符串中的1个或多个逗号分隔的数字。
WHERE FIND_IN_SET('114', column1)
OR FIND_IN_SET('112', column1)
在这里不工作。
INSTR(d.villa_collections, "114") > 0
有效,但如果是
,也会给我结果INSTR(d.villa_collections, "11") > 0
我应该如何以一种有效的方式处理此问题,使我能够匹配所需的记录?
答案 0 :(得分:2)
那么,您可以使用REGEXP:
WHERE column1 REGEXP '[[:<:]]123[[:>:]]'
如果前后都有单词边界,则匹配123。
SELECT '[112,114]' REGEXP '[[:<:]]112[[:>:]]'; -- 1
SELECT '[112,114]' REGEXP '[[:<:]]11[[:>:]]'; -- 0
SELECT '[112]' REGEXP '[[:<:]]112[[:>:]]'; -- 1
SELECT '[11]' REGEXP '[[:<:]]112[[:>:]]'; -- 0
答案 1 :(得分:1)
您可以Replace()
方括号并使用FIND_IN_SET()
:
WHERE FIND_IN_SET('114', REPLACE(REPLACE(column1, '[', ''), ']', ''))
OR FIND_IN_SET('112', REPLACE(REPLACE(column1, '[', ''), ']', ''))