我有两个问题。

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

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

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

最佳答案

完全等价于

LIKE '%[%]'


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

(注意,RLIKE只是一个mSQL'ish synonym of REGEXP)。简而言之,这意味着LIKE总是匹配整个字符串,而REGEXPRLIKE可能匹配任何子字符串。
这就是为什么我会假设有七张专辑
MyName[abc]plus


MyName [abc]!

你可以试着通过
SELECT AlbumName FROM album
WHERE AlbumName RLIKE '.*\\[.*\\]' AND AlbumName NOT RLIKE '^.*\\[.*\\]$';

10-08 19:42