2022年6月25日土曜日

SQLite3 文字列を切り取る (substring(),substr())

概要

文字列を切り取る(抽出する)には関数substring() もしくはsubstr()を使用する。

substringsubstr の機能は全く同じ。

substringはver 3.34.0 から利用可能。

構文


substring(text, start_position)
substring(text, start_position, length)
substr(text, start_position)
substr(text, start_position, length)
                
  • 第2引数は開始位置
    • 最初の文字は「1」、2番目以降 2、3、4... となる
    • 「0」は指定しないように注意する
    • マイナスを指定すると、末尾から何文字目かを指定できる
  • 第3引数は切り抜く長さ
    • 省略できる
    • マイナスを指定すると開始位置から最初の文字に向かって切り取る

実行例


sqlite> select substring('1234567890', 3);
34567890
sqlite> select substring('1234567890', 3, 3);
345
sqlite> select substring('1234567890', -5, 3);
678
sqlite> select substring('1234567890', 3, -2);
12

sqlite> select substr('1234567890', 3);
34567890
sqlite> select substr('1234567890', 3, 3);
345
sqlite> select substr('1234567890', -5, 3);
678
sqlite> select substr('1234567890', 3, -2);
12
                

開始位置に「0」は指定しないこと

開始位置に「0」を指定すると「1」を指定した時と同じように文字列の最初から開始されるが、 長さを指定したときに意図した動きにならない。


sqlite> -- # 1.
sqlite> select substring('1234567890', 1);
1234567890
sqlite> select substring('1234567890', 0);
1234567890

sqlite> -- # 2.
sqlite> select substring('1234567890', 1, 3);
123
sqlite> select substring('1234567890', 0, 3);
12
                
  1. 開始位置のみを指定した場合は「1」「0」は同じ
  2. 長さも指定した場合、「0」を指定すると意図した長さより短くなってしまう

参考URL