我有两个疑问。
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
始终匹配整个字符串,而REGEXP
和RLIKE
可以匹配任何子字符串。
这就是为什么我会假设周围显然有七个专辑名称,例如
MyName[abc]plus
或
MyName [abc]!
您可以尝试通过以下方式确定这七条记录
SELECT AlbumName FROM album
WHERE AlbumName RLIKE '.*\[.*\]' AND AlbumName NOT RLIKE '^.*\[.*\]$';