MySQL INSTR-精确匹配子字符串

时间:2018-11-23 11:14:06

标签: mysql sql string

我有一个表,其中的一列以以下方式存储数据。

|  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

我应该如何以一种有效的方式处理此问题,使我能够匹配所需的记录?

2 个答案:

答案 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, '[', ''), ']', ''))