SQLite | SQLite関数 | 文字列から一部を抽出する(substr関数)

substr関数は、文字列の指定した位置から指定した長さの部分文字列を返します。ここでは、substr関数の使い方を説明します。

substr関数の使い方

構文は次のとおりです。

substr(文字列, 開始位置, 文字数)
substr(文字列, 開始位置)

第1引数の文字列から、第2引数の位置を起点として第3引数の長さだけ抽出します。第3引数を省略すると、開始位置から文字列の末尾までを返します。

位置は最初の文字が1、2番目が2です。負の値では末尾から数え、-1が最後の文字、-2が後ろから2番目の文字です。

substr('database', 1, 3);    /* dat */
substr('database', 1, 4);    /* data */
substr('database', 5, 3);    /* bas */
substr('database', 5);       /* base */
substr('database', -3, 2);   /* as */

第1引数に列名を指定すると、列に保存されている各値から部分文字列を取得します。

例で使用するテーブルを作成します。

create table user (id integer, name text, address text);
sqlite> create table user (id integer, name text, address text);
sqlite> 

次のデータを追加します。

insert into user values (1, 'devkuma', '01:Seoul ');
insert into user values (2, 'kimkc', '02:Busan');
insert into user values (3, 'araikuma', '03:Daejeon');
insert into user values (4, 'happykuma', '01:Seoul ');
insert into user values (5, 'raccoon', '04:Paju ');
sqlite> insert into user values (1, 'devkuma', '01:Seoul ');
sqlite> insert into user values (2, 'kimkc', '02:Busan');
sqlite> insert into user values (3, 'araikuma', '03:Daejeon');
sqlite> insert into user values (4, 'happykuma', '01:Seoul ');
sqlite> insert into user values (5, 'raccoon', '04:Paju ');
sqlite> 

substr関数で、address列の各値の4文字目から3文字を抽出します。

select id, name, substr(address, 4, 3) from user;
sqlite> .mode column
sqlite> .header on
sqlite>
sqlite> select id, name, substr(address, 4, 3) from user;
id          name        substr(address, 4, 3)
----------  ----------  ---------------------
1           devkuma     Seo                  
2           kimkc       Bus                  
3           araikuma    Dae                  
5           raccoon     Paj                  
4           happykuma   Seo                  
sqlite> 

指定した位置から指定した長さの部分文字列が返されました。

次に長さを省略し、4文字目から末尾までを抽出します。

select id, name, substr(address, 4) from user;
sqlite> select id, name, substr(address, 4) from user;
id          name        substr(address, 4)
----------  ----------  ------------------
1           devkuma     Seoul             
2           kimkc       Busan             
3           araikuma    Daejeon           
5           raccoon     Paju              
4           happykuma   Seoul             
sqlite> 

指定した位置から文字列の末尾までが返されました。