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



我有两个疑问。

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

结果:15733

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

结果:15740

所以如您所见,like 返回的元素比 rlike 少 7 个。我有两个问题,为什么会这样?陈述不一样吗?如果我正在寻找包含Result: Artist - Song [Live]Result: Artist- Song [Gold CD, Excplicit Lyrics]的名称,那么查询会返回正确的结果吗?

的确切等价性

LIKE '%[%]' 

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

(请注意,RLIKE只是REGEXP的mSQL同义词)。简而言之,这意味着LIKE始终匹配整个字符串,而REGEXPRLIKE可以匹配任何子字符串。

这就是为什么我会假设周围显然有七个专辑名称,例如

MyName[abc]plus

MyName [abc]!

您可以尝试通过以下方式确定这七条记录

SELECT AlbumName FROM album 
WHERE AlbumName RLIKE '.*\[.*\]' AND AlbumName NOT RLIKE '^.*\[.*\]$';

最新更新