
今回はBigQueryの文字列加工でよく使われるSTRPOS関数を紹介する。
STRPOS関数とは?
STRPOS関数は対象の文字列から、指定した文字列の位置を「整数」で返してくれる文字列関数だ。
簡単にいうと、STRPOS関数はある文字や言葉が、文章の中の「何番目」にあるかを数字で教えてくれる。
例えば、下記テーブルのmail_addressカラムにおけるそれぞれのメールアドレスの@の位置を知りたい場合があるとする。
上記データに対して、下記のようにSTRPOS関数を使用して@の位置を取得したクエリとその結果が下記となる。
1 2 3 4 5 6 | SELECT id ,mail_address ,STRPOS(mail_address,'@') AS strpos_sample FROM sample_address ; |
STRPOS関数により、メールアドレスの@の位置を整数で取得出来ていることがお分かりいただけると思う。
このようにSTRPOS関数は対象の文字列において指定した文字列(1文字でも2文字以上でもOK)が左から何番目に位置するかを教えてくれる。
ちなみに、STRPOSという名称が「わかりにくい、、、」と感じるかもしれないが、STRとPOSに分解すると意味が分かってくる。
- STR→STRING(文字列)
- POS→POSITION(位置)
という形でSTRINGとPOSITIONの略がくっついた名称になっている。
訳してしまえば、「文字列の位置に関係する関数」だということが理解しやすいはずだ。
STRPOS関数の使い方
STRPOS関数の使い方は比較的シンプルで下記2つを指定する
- 対象カラムを指定
- 位置を知りたい文字列を指定
先ほどのメールアドレスの中から@の位置を返す具体例の場合、下記のように指定すればOKだ。
STRPOS関数は上記のように使うことが出来る。
STRPOS関数が返してくれる値(戻り値)は整数型(INT64型)となる。
ちなみに指定する文字列は1文字だけでなく、下記のように2文字以上でも指定できる。
1 2 3 4 5 6 | SELECT id ,mail_address ,STRPOS(mail_address,'@sample') AS strpos_sample FROM sample_address ; |
上記のように2文字以上を指定した場合、指定した文字列が始まる文字の位置(@sampleの場合は@の位置)が返される点を覚えておきたい。
まとめ
今回は対象の文字列から指定した文字列の位置を整数で返してくれるSTRPOS関数を紹介した。
- STRPOS関数とは:文字列中に指定した文字列が出現する「位置(インデックス)」を整数(INT64型)で返す関数。
- 構文:
STRPOS(対象の文字列, 検索する文字列)
- 検索文字列は:1文字でも複数文字でもOK
- 返される値は何番目かを表す整数(文字列の左から数えた位置。先頭は1)
- 見つからない場合は0を返す(0は「見つからなかった」ことを意味する)
STRPOS関数はSUBSTR関数やSUBSTRING関数などの他の関数と組み合わせて使われることが多く、単体で使われることはあまりないかもしれない(私はあまり見たことがない)。
他の関数と組み合わせて使われるため、「STRPOS関数がどんなことをしているのか?」がわかりにくい場合が多数あると思う。
そういう場合は本記事のようにSTRPOS関数の部分だけを抜き出してみて、どのような処理をしているかを確認してみると理解しやすいと思う。