RLIKE / REGEXP和LIKE的等价性 - 匹配整个字符串与任意子字符串

时间:2016-05-29 09:25:32

标签: mysql regex sql-like rlike regexp-like

我有两个问题。

SELECT count(AlbumID)
  FROM album
  WHERE albumname like '%[%]';

结果:1​​5733

SELECT count(AlbumName)
  FROM album
  WHERE AlbumName RLIKE '.*\\[.*\\]';

结果:1​​5740

因此,您可以看到返回7个元素比rlike少。我有两个问题,为什么呢?陈述不一样吗?如果我要查找包含让我们说Result: Artist - Song [Live]Result: Artist- Song [Gold CD, Excplicit Lyrics]的名称,那么查询会返回正确的结果吗?

1 个答案:

答案 0 :(得分:2)

的确切等效性
LIKE '%[%]' 

REGEXP '^.*\\[.*\\]$'

(请注意,RLIKE只是mSQL'ish synonym of REGEXP)。简而言之,这意味着LIKE始终匹配整个字符串,而REGEXPRLIKE可能匹配任何子字符串。

这就是为什么我会假设有明显的七个AlbumNames,如

MyName[abc]plus

MyName [abc]!

您可以尝试通过

确定这7条记录
SELECT AlbumName FROM album 
WHERE AlbumName RLIKE '.*\\[.*\\]' AND AlbumName NOT RLIKE '^.*\\[.*\\]$';