特定
説明
LOCATE関数は、文字列str内で部分文字列substrが最初に出現する位置を返します(カウントは1から始まります)。オプションの第3パラメータposが指定された場合、文字列str内の指定された位置から検索を開始します。これは文字列マッチングや位置検索によく使用されるMySQL互換関数です。
構文
LOCATE(<substr>, <str> [, <pos>])
パラメータ
| パラメータ | 説明 |
|---|---|
<substr> | 検索対象の部分文字列。型: VARCHAR |
<str> | 検索元の文字列。型: VARCHAR |
<pos> | オプションパラメータ、検索の開始位置(1から数える)。型: INT |
戻り値
INT型を返し、strの中でsubstrが最初に出現する位置を表します(1から数える)。
検索ルール:
- 位置のカウントは1から開始します(0からではありません)
- 最初にマッチした位置を返します
- posが指定された場合、その位置から検索を開始しますが、返される位置は文字列の先頭からの絶対位置です
- 検索は大文字小文字を区別します
特殊なケース:
- マッチするものが見つからない場合、0を返します
- いずれかのパラメータがNULLの場合、NULLを返します
- substrが空文字列の場合、1を返します(posが指定されており、pos > 1の場合はposの値を返します)
- strが空でsubstrが空でない場合、0を返します
- posが1未満の場合、0を返します
- posがstrの長さより大きい場合、0を返します
例
- 基本的な検索
SELECT LOCATE('bar', 'foobarbar'), LOCATE('xbar', 'foobar'), LOCATE('bar', 'foobarbar', 5);
+----------------------------+--------------------------+-------------------------------+
| LOCATE('bar', 'foobarbar') | LOCATE('xbar', 'foobar') | LOCATE('bar', 'foobarbar', 5) |
+----------------------------+--------------------------+-------------------------------+
| 4 | 0 | 7 |
+----------------------------+--------------------------+-------------------------------+
- 最初の文字を見つける
SELECT LOCATE('f', 'foobar'), LOCATE('r', 'foobar');
+-----------------------+-----------------------+
| LOCATE('f', 'foobar') | LOCATE('r', 'foobar') |
+-----------------------+-----------------------+
| 1 | 6 |
+-----------------------+-----------------------+
- 一致するものが見つかりません
SELECT LOCATE('xyz', 'foobar'), LOCATE('FOO', 'foobar');
+-------------------------+-------------------------+
| LOCATE('xyz', 'foobar') | LOCATE('FOO', 'foobar') |
+-------------------------+-------------------------+
| 0 | 0 |
+-------------------------+-------------------------+