メインコンテンツまでスキップ
バージョン: 26.x

POSITION

説明

POSITION関数は、メイン文字列内での部分文字列の位置を検索するために使用され、位置は1から数えられます。

構文

POSITION(<substr> IN <str>)

POSITION(<substr>, <str> [, <pos>])

パラメータ

Parameterデスクリプション
substr検索する部分文字列。型: VARCHAR
str検索対象のメイン文字列。型: VARCHAR
pos開始位置を指定するオプションパラメータ(1から開始)。指定した場合、この位置から検索を開始します

Return Value

INT型を返し、メイン文字列内での部分文字列の最初の出現位置を表します。

検索ルール:

  • 1から始まる位置インデックスを返します
  • 部分文字列が見つからない場合は0を返します
  • 開始位置が指定された場合、その位置から検索します
  • 検索では大文字と小文字を区別します

特殊なケース:

  • いずれかのパラメータがNULLの場合、NULLを返します
  • 部分文字列が空文字列の場合、1を返します(または開始位置)
  • 開始位置が文字列の長さを超える場合、0を返します
  • 開始位置が負の値の場合、文字列の先頭から検索します

Examples

  1. 基本的な検索(2つの構文形式)
SELECT POSITION('bar' IN 'foobarbar'), POSITION('bar', 'foobarbar');
+----------------------------------+--------------------------------+
| POSITION('bar' IN 'foobarbar') | POSITION('bar', 'foobarbar') |
+----------------------------------+--------------------------------+
| 4 | 4 |
+----------------------------------+--------------------------------+
  1. 開始位置を指定した検索
SELECT POSITION('bar', 'foobarbar', 5), POSITION('xbar', 'foobar');
+-----------------------------------+----------------------------------+
| POSITION('bar', 'foobarbar', 5) | POSITION('xbar', 'foobar') |
+-----------------------------------+----------------------------------+
| 7 | 0 |
+-----------------------------------+----------------------------------+
  1. NULL値の処理
SELECT POSITION('test' IN NULL), POSITION(NULL, 'test');
+--------------------------+------------------------+
| POSITION('test' IN NULL) | POSITION(NULL, 'test') |
+--------------------------+------------------------+
| NULL | NULL |
+--------------------------+------------------------+
  1. 空文字列の処理
SELECT POSITION('' IN 'hello'), POSITION('world' IN '');
+------------------------+------------------------+
| POSITION('' IN 'hello') | POSITION('world' IN '') |
+------------------------+------------------------+
| 1 | 0 |
+------------------------+------------------------+
  1. 大文字小文字を区別する検索
SELECT POSITION('World' IN 'Hello World'), POSITION('world' IN 'Hello World');
+----------------------------------+----------------------------------+
| POSITION('World' IN 'Hello World') | POSITION('world' IN 'Hello World') |
+----------------------------------+----------------------------------+
| 7 | 0 |
+----------------------------------+----------------------------------+
  1. 異なる位置から検索する
SELECT POSITION('a', 'banana', 1), POSITION('a', 'banana', 3);
+-----------------------------+-----------------------------+
| POSITION('a', 'banana', 1) | POSITION('a', 'banana', 3) |
+-----------------------------+-----------------------------+
| 2 | 4 |
+-----------------------------+-----------------------------+
  1. UTF-8マルチバイト文字
SELECT POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello'), POSITION('hello', 'ṭṛì ḍḍumai hello', 8);
+--------------------------------------+-------------------------------------------+
| POSITION('ḍḍumai' IN 'ṭṛì ḍḍumai hello') | POSITION('hello', 'ṭṛì ḍḍumai hello', 8) |
+--------------------------------------+-------------------------------------------+
| 5 | 13 |
+--------------------------------------+-------------------------------------------+
  1. 特殊文字検索
SELECT POSITION('@' IN 'user@domain.com'), POSITION('.', 'user@domain.com', 10);
+----------------------------------+--------------------------------------+
| POSITION('@' IN 'user@domain.com') | POSITION('.', 'user@domain.com', 10) |
+----------------------------------+--------------------------------------+
| 5 | 12 |
+----------------------------------+--------------------------------------+
  1. 開始位置が範囲外
SELECT POSITION('test', 'hello world', 20), POSITION('test', 'hello world', 0);
+--------------------------------------+-------------------------------------+
| POSITION('test', 'hello world', 20) | POSITION('test', 'hello world', 0) |
+--------------------------------------+-------------------------------------+
| 0 | 0 |
+--------------------------------------+-------------------------------------+
  1. 数字と記号での検索
SELECT POSITION('123' IN '456123789'), POSITION('-', 'phone: 123-456-7890', 11);
+------------------------------+-------------------------------------------+
| POSITION('123' IN '456123789') | POSITION('-', 'phone: 123-456-7890', 11) |
+------------------------------+-------------------------------------------+
| 4 | 11 |
+------------------------------+-------------------------------------------+

説明

POSITION関数は、文字列内の部分文字列の位置を検索するために使用されます(1から数えます)。

部分文字列が見つからない場合、この関数は0を返します。

構文

POSITION ( <substr> IN <str> )

POSITION ( <substr>, <str> [, <pos>] )

パラメータ

パラメータ説明
substr検索する部分文字列
str検索対象の文字列
posこのパラメータが指定された場合、posの添字から始まる文字列からsubstrの位置が検索される

戻り値

strにおけるsubstrの位置(1から数える)。 substrが見つからない場合は0を返す。

SELECT POSITION('bar' IN 'foobarbar'), 
POSITION('bar', 'foobarbar'),
POSITION('bar', 'foobarbar', 5),
POSITION('xbar', 'foobar');

+----------------------------------+--------------------------------+-----------------------------------+----------------------------------+
| position('bar' in 'foobarbar') | position('bar', 'foobarbar') | position('bar', 'foobarbar', 5) | position('xbar', 'foobar') |
+----------------------------------+--------------------------------+-----------------------------------+----------------------------------+
| 4 | 4 | 7 | 0 |
+----------------------------------+--------------------------------+-----------------------------------+----------------------------------+