0

我在这样的单个字段中有多个 ID

field_name
+----------+
12345|34456|43564

现在我想要的是获得该行,如果它完全匹配一个数字,所以我搜索了一下,我找到了这个并在我的查询中使用它,但它失败了

SELECT field_name FROM tbl_name WHERE field_name REGEXP '[[:<:]]34456[[:>:]]';

所以我用了这个反斜杠,它起作用了,

SELECT field_name FROM tbl_name WHERE field_name REGEXP '[[:<:]]34456\[[:>:]]';

那么它是完美的还是我在某个地方出错了?我需要一个精确匹配,我不希望它正在寻找 34456,如果 34457 存在并且需要它,我想要EXACT匹配,但我不能WHERE在这里使用

4

1 回答 1

2

好吧,如果你像这样存储 id,没有解决方案会是“完美的”:)

MySQL 有一个名为的函数,该函数FIND_IN_SET对此类任务很有用,但它假定您的列表是逗号分隔的。因此,您需要用逗号替换管道才能使用该功能。

像这样的东西应该工作:

SELECT field_name 
FROM tbl_name 
WHERE find_in_set('34456',replace(field_name,'|',',')) > 0;
于 2013-01-15T17:55:17.597 回答