MySQL では、必要に応じて数値から文字列への、また文字列から数値への変換が自動で行われます。
mysql>SELECT 1+"1";
-> 2 mysql>SELECT CONCAT(2,' test');
-> '2 test'
数値を文字列に明示的に変換するには、対象の数値を引数として
CONCAT()
に渡します。
文字列関数の引数としてバイナリ文字列を指定した場合、返される文字列もバイナリ文字列になります。文字列に変換された数値はバイナリ文字列として扱われます。これは比較にのみ影響します。
通常、文字列の比較でいずれかの式がケース依存の場合、比較はケース依存方式で実行されます。
expr LIKE pat [ESCAPE 'escape-char']
SQL
の単純な正規表現比較を使用したパターンマッチ。1
(TRUE)または
0
(FALSE)を返す。LIKE
では、次の 2
つのワイルドカード文字をパターン内で使用できる。
文字 | 説明 |
% |
任意の数の文字(ゼロ文字を含む)と一致する。 |
_ |
厳密に 1 つの文字と一致する。 |
mysql>SELECT 'David!' LIKE 'David_';
-> 1 mysql>SELECT 'David!' LIKE '%D%v%';
-> 1
ワイルドカード文字を通常の文字として扱う場合は、直前にエスケープ文字を付ける。特定の
ESCAPE
文字を指定しないと、‘\
’
をエスケープ文字として使用するものとみなされる。
文字列 | 説明 |
\% |
1 つの % 文字と一致する。 |
\_ |
1 つの _ 文字と一致する。 |
mysql>SELECT 'David!' LIKE 'David\_';
-> 0 mysql>SELECT 'David_' LIKE 'David\_';
-> 1
別のエスケープ文字を指定する場合は、次のように、ESCAPE
節を使用する。
mysql> SELECT 'David_' LIKE 'David|_' ESCAPE '|';
-> 1
次の 2 つのステートメントは、オペランドのどちらか一方がバイナリ文字列の場合、文字列の比較がケース依存方式で行われることを示している。
mysql>SELECT 'abc' LIKE 'ABC';
-> 1 mysql>SELECT 'abc' LIKE BINARY 'ABC';
-> 0
LIKE
は数値式で使用できる(これは SQL-99 の
LIKE
に対する MySQL の拡張)。
mysql>SELECT 10 LIKE '1%';
-> 1 mysql>SELECT 'いあ' LIKE '%い%';
-> 1 mysql>SELECT 'イあ' LIKE '%い%';
-> 0 # 注意: EUC-JP コードで、'イあ' は 0xA5A4A4A2。'い' は 0xA4A4。
注意:MySQL では文字列で C
のエスケープ構文('\n
'
など)を使用するため、LIKE
の文字列に ‘\
’
を挿入するときは、2 倍の数の
‘\
’
を使用する必要がある。たとえば、'\n
'
を検索する場合は、'\\n
'
と指定する。また、‘\
’
を検索する場合は、'\\\\
'
と指定する(バックスラッシュはパーサによって一度取り除かれ、パターンマッチの実行時にもう一度取り除かれる。そして、残った
1
つのバックスラッシュがマッチングの対象となる)。
MATCH (col1,col2,...)AGAINST (expr [IN BOOLEAN
MODE | WITH QUERY EXPANSION] )
MATCH ... AGAINST()
は全文検索に使用され、カラム
(col1,col2,...)
のテキストと、クエリ expr
のテキストとの関連性(類似度)を返す。関連性は正の浮動小数点数で表現される。関連性がゼロのときは、類似性がまったくないことを意味する。
MATCH ... AGAINST()
は MySQL
バージョン 3.23.23
以降で利用できる。IN BOOLEAN
MODE
拡張はバージョン 4.0.1
で追加され、WITH QUERY EXPANSION
は 4.1.1 で追加された。
詳細および使用例については、項6.8. 「MySQL 全文検索」を参照。
expr NOT LIKE pat [ESCAPE
'escape-char']
NOT (expr LIKE pat [ESCAPE
'escape-char'])
と同じ。
expr NOT REGEXP pat
, expr NOT
RLIKE pat
NOT (expr REGEXP pat)
と同じ。
expr REGEXP pat
, expr RLIKE
pat
パターン pat
に対する文字列式 expr
のパターンマッチを実行する。パターンとして、拡張正規表現を使用できる。
See 付録 G. MySQL の正規表現。 expr
が pat
とマッチする場合は
1
を返し、マッチしない場合は
0
を返す。RLIKE
は、mSQL
との互換性を確保するための、REGEXP
のシノニム。 注意:MySQL では、文字列で C
のエスケープ構文('\n
'
など)を使用するため、REGEXP
の文字列に ‘\
’
を挿入するときは、2 倍の数の
‘\
’
を使用する必要がある。 MySQL バージョン
3.23.4 以降では、REGEXP
は通常(非バイナリ)の文字列に対してはケース非依存。
mysql>SELECT 'Monty!' REGEXP 'm%y%%';
-> 0 mysql>SELECT 'Monty!' REGEXP '.*';
-> 1 mysql>SELECT 'new*\n*line' REGEXP 'new\\*.\\*line';
-> 1 mysql>SELECT "a" REGEXP "A", "a" REGEXP BINARY "A";
-> 1 0 mysql>SELECT "a" REGEXP "^[a-d]";
-> 1
REGEXP
と RLIKE
では、現在のキャラクタセット(デフォルトでは
ISO-8859-1
Latin1)に基づいて文字の型が決定される。
STRCMP(expr1,expr2)
STRCMP()
両方の文字列が同じものである場合は
0
を返し、現在のソート順で最初の引数が 2
番目の引数より小さい場合は
-1
を返し、それ以外の場合は
-1
を返す。
mysql>SELECT STRCMP('text', 'text2');
-> -1 mysql>SELECT STRCMP('text2', 'text');
-> 1 mysql>SELECT STRCMP('text', 'text');
-> 0
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.