2016-05-29 21 views
1

私は2つのクエリを持っています。RLIKE/REGEXPとLIKEの同等の一致文字列と任意の部分文字列の比較

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

結果:15733

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

結果:15740

ですから、RLIKEより7つの要素を以下のように戻って見ることができるように。なぜ私は2つの質問がありますか?ステートメントは同じではありませんか?そして、私が含まれている名前を探している場合は、Result: Artist - Song [Live]またはResult: Artist- Song [Gold CD, Excplicit Lyrics]と言って何が正しい結果を返すでしょうか?

+0

することにより、これらの7つのレコードを決定しようとするかもしれ周り

MyName[abc]plus 

または

MyName [abc]! 

のような7 AlbumNamesが明らかに存在していることを前提とする理由である

'SELECT count(AlbumID) FROM album WHERE AlbumName RLIKE '。* \ \ [。* \\] '; '? 'null'である' AlbumID'はありますか? ==> 'AlbumIDがnullのアルバムからカウント(*)を選択する' '%[%] ';' – EagleRainbow

+1

@EagleRainbowのようなアルバム名が15740という同じアルバムからの選択カウント(*)の結果は? 2番目のクエリで結果が0になったので、そのようなアルバムはありません。そして、3番目のクエリは15733のAlbumIDカウントと同じ結果を得ました。そのため、異なるselectは結果に影響しませんでした。なぜそれが分かっていますか? – Mike

+0

7つの謎の行を見るには、 'Album Album From FROM album WHERE ... rlike ... AND ... like like ... 'を実行します。それらの間で共通点は何ですか?その後、あなた自身の質問に答えてください。 –

答えて

1

LIKE '%[%]' 

の正確な等価は

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

(RLIKEは単なるmSQL'ish synonym of REGEXPであることに注意)です。つまり、LIKEは常に文字列全体と一致しますが、REGEXPRLIKEは任意の部分文字列と一致する可能性があります。私はあなたが何

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

ありがとうございますそれはまさにあなたのように悲しいです:) – Mike

関連する問題