Mysql REGEXP完全相同的字符串

时间:2015-03-24 08:03:25

标签: mysql regex

我正在尝试使用相同的字符串获取所有这些结果,但下面的查询返回匹配所有具有Cars的字符串的结果,但我只需要与Cars完全匹配的结果

SELECT i.name
FROM table_name i
WHERE i.name REGEXP '[[:<:]]Cars[[:>:]]'

我认为[[:&lt ;:]] [[:&gt;:]]会将结果限制为确切的值

编辑:

我的不好我没有提到,上面只是一个例子,而不仅仅是汽车会有多个字符串,比如

SELECT i.name
    FROM table_name i
    WHERE i.name REGEXP '[[:<:]]Cars[[:>:]].[[:<:]]Movies[[:>:]].[[:<:]]Camping[[:>:]]''
  

根据条件,将有多个字符串匹配。一世   我正在尝试Regexp因为其他我必须明确声明LIKE   所有字符串都没有%。

     

我使用REGEXP的唯一原因是因为我可以传递我的字符串   一次通过连接,这是不可能像我一样使用LIKE   知道

My table

**ColumnName**
Cars
Racing Cars
Movies
Romantic Movies

通过使用上述查询,我​​获得了与汽车和电影相关的所有结果,而我只需要完全匹配

汽车与汽车电影

2 个答案:

答案 0 :(得分:1)

为什么要在完全匹配时使用正则表达式。只需试试这个

SELECT i.name
FROM table_name i
WHERE i.name = 'CARS'

SELECT i.name
FROM table_name i
WHERE i.name like '%CARS%'

根据您的字符串和模式

删除左或右百搭字符%

修改: -

根据您的编辑,如果您只想匹配汽车和电影,那么您可以这样写:

SELECT i.name
FROM table_name i
WHERE i.name IN ('CARS','MOVIES')

答案 1 :(得分:1)

@Deepanshu,我看到你使用REGEXP,可能是因为你的实现限制了你作为一个参数给一个函数提供将在REGEXP表达式中使用的整个字符串。 [[:<:]][[:>:]]匹配某个匹配单词的开头和结尾,而不是整个字符串。因此,您希望分别使用^$,并且您将使用的确切查询是:

SELECT i.name
FROM table_name i
WHERE i.name REGEXP '(^Cars$)|(^Movies$)|(^Camping$)'

但是,由于我注意到很多人继续使用mySQL REGEXP进行直接的相等比较,这不是一个好习惯,我建议改变你的实现,以便它使用LIKE,相等或类似的东西。您还可以使用编程语言动态生成LIKE语句。