如何在SQL中的列中查找确切的值集

时间:2017-03-27 15:44:22

标签: mysql sql regex

示例:

表是:

enter image description here

所以我希望在任何一方有或没有任何非数字值的情况下返回'123'和'456'。 所以:

  • 123
  • (123,
  • ,123,
  • ,123)

一切都很好。

但是

01234

不是我想要的东西。

所以我的查询应该返回行'1'和'2'而不是3.

5 个答案:

答案 0 :(得分:2)

如果您想使用正则表达式,请使用不应包含在您想要匹配的部分两侧的内容。通常情况下,如果您正在寻找"整个单词"在一个字符串中。

根据https://dev.mysql.com/doc/refman/5.7/en/regexp.html

  

[[:<:]],[[:>:]]

     

这些标记代表字边界。它们分别匹配单词的开头和结尾。单词是一系列单词字符,其前面或后面没有单词字符。单词字符是alnum类中的字母数字字符或下划线(_)。

所以尝试这样的事情:(删除点将要求123/456不在中间某处)

Select * from TABLE where data REGEXP '[[:<:]](123|456)[[:>:]]';

答案 1 :(得分:1)

为什么不将LIKE与通配符一起使用?

答案 2 :(得分:0)

如果您想使用regexp,请使用:

select * from TABLE where data REGEXP '(123).*(456)';
select '--- my name is 123 and my 456 is 789' REGEXP '(123).*(456)' ;

返回1

select '--- my name is 321 and my 654 is 987' REGEXP '(123).*(456)' ;

返回0

select '--- my name is 1234 and my 2 is 1' REGEXP '(123).*(456)' ;

返回0

答案 3 :(得分:0)

SELECT * FROM TABLE 
WHERE data LIKE '% 123 %'
AND data LIKE '% 456 %'

我宁愿采用这种方式尝试使用LIKE通配符代替regexp

此查询将SELECT&#34;全部&#34; FROMWHERE DATA有一个字符串&#34; 123&#34;并且DATA有一个字符串&#34; 456&#34;。

修改

在%和数字之间添加了空格,以便它不会在更长的字符串中搜索字符串(例如,它不会在内部找到456&#39; 123456789&#39;不再,但会在里面找到它&#39; 123 456 789&#39;)。

<强> EDIT2:

实际上,如果您的字符串被空格包围,上面给出的示例将起作用。实际上regexp可能更适合您的情况。如下所述,我建议使用像这样的字边界:

SELECT * FROM TABLE 
WHERE DATA REGEXP '[[:<:]]123[[:>:]]';
AND DATA REGEXP '[[:<:]]456[[:>:]]';

<强> EDIT3:

在你的情况下,完美的方式如下:

SELECT * FROM TABLE 
WHERE DATA REGEXP '(^|[^0-9])123([^0-9]|$)';
AND DATA REGEXP '(^|[^0-9])456([^0-9]|$)';

http://regexp.pl/进行测试,您可以将语言切换为ENG并尝试使用这些语言,或者只是在您的脚本上检查它们。

答案 4 :(得分:0)

Select ID from Table 
where patindex('%123%', Data) <> 0 
and patindex('%456%',Data) <> 0