MySQLの文字列比較で初めて知ったことがあったのでメモ。
文字列比較
文字列比較は
- LIKE : 単純なパターン一致
- NOT LIKE : 単純なパターン一致の否定
- STRCMP() : 2つの文字列を比較
などがあるが、"="演算子で実行される文字列の末尾に空白があった場合は無視される。
"="もしくはLIKEの場合
select 'a' = 'a', 'a' = 'a ', 'a' like 'a', 'a' like 'a ';
'a' = 'a' | 'a' = 'a '(空白あり) | 'a' like 'a' | 'a' like 'a '(空白あり) |
---|---|---|---|
1 | 1 | 1 | 0 |
LIKEの場合は正常に文字列比較するよう。
STRCMP()の場合
STRCMP() は、文字列が同じ場合は 0 を返し、現在のソート順に従って 1 番目の引数が 2 番目よりも小さい場合は -1、それ以外の場合は 1 を返します。
STRCMPの場合も、末尾の空白は無視して同一値として判別するよう。
select STRCMP('a', 'a'), STRCMP('a', 'a ');
STRCMP('a', 'a') | STRCMP('a', 'a ')(空白あり) |
---|---|
0 | 0 |