SQLで文字列操作をマスターしよう!SUBSTR、LEFT、RIGHT関数の使い方とサンプルコード
SQLiteで部分文字列を選択するクエリ
SUBSTR
関数は、文字列の一部を指定した位置から切り取るのに最も汎用的な関数です。構文は以下の通りです。
SUBSTR(string, start, length)
string
: 部分文字列を取得する対象の文字列start
: 部分文字列の開始位置 (1 から始まる)length
: 部分文字列の長さ
例:
SELECT SUBSTR('ABCDEF', 3, 3);
このクエリは、文字列 "ABCDEF" から 3 番目の文字から 3 文字分の部分文字列を取得し、結果として "CDE" を返します。
LEFT
関数は、文字列の先頭から指定した文字数分の部分文字列を取得します。構文は以下の通りです。
LEFT(string, length)
SELECT LEFT('ABCDEF', 2);
RIGHT(string, length)
SELECT RIGHT('ABCDEF', 3);
補足:
- 上記の例では、文字列リテラルを直接クエリで使用していますが、テーブルの列から文字列を取得することもできます。
- 複数の部分文字列を連結したい場合は、
||
演算子を使用できます。 - 例えば、以下のクエリは、文字列 "ABCDEF" から 2 番目の文字から 3 文字分の部分文字列と、5 番目の文字から 2 文字分の部分文字列を連結して返します。
SELECT SUBSTR('ABCDEF', 2, 3) || SUBSTR('ABCDEF', 5, 2);
このクエリは "CDE" と "EF" を連結し、結果として "CDEF" を返します。
これらの関数を組み合わせることで、様々な部分文字列操作を SQLite で実現することができます。
SELECT
name,
SUBSTR(name, 1, 3) AS first_three,
SUBSTR(name, -3) AS last_three
FROM customers;
このクエリは、以下の結果を返します。
| name | first_three | last_three |
|------------|-------------|-------------|
| 田中一郎 | 田中 | 一郎 |
| 佐藤二郎 | 佐藤 | 二郎 |
| 鈴木三郎 | 鈴木 | 三郎 |
このコードでは、以下の点に注目してください。
customers
テーブルには、name
という名前の列があることを想定しています。SUBSTR
関数は、名前の最初の 3 文字と最後の 3 文字を取得するために使用されています。AS
キーワードを使用して、取得した部分文字列にエイリアス (first_three
とlast_three
) を割り当てています。
SQLiteで部分文字列を選択するその他の方法
INSTR 関数と SUBSTR 関数の組み合わせ
INSTR
関数は、ある文字列 (検索文字列) が別の文字列 (対象文字列) の中に最初に現れる位置を返す関数です。 この関数と SUBSTR
関数を組み合わせることで、検索文字列を含む部分文字列を取得することができます。
SELECT
name,
SUBSTR(name, INSTR(name, '田中') + 3, 3) AS first_three_after_tanaka
FROM customers;
このクエリは、customers
テーブルから名前と、名前の中に "田中" が最初に現れる位置から 3 文字分の部分文字列を取得します。 結果として、"一郎" が返されます。
LIKE
演算子は、文字列のパターンマッチングに使用できます。 ワイルドカード文字 (%
) を使用することで、部分文字列を含む行を選択することができます。
SELECT
name
FROM customers
WHERE name LIKE '%田中%';
このクエリは、customers
テーブルから名前の中に "田中" を含むすべての行を選択します。
正規表現関数
SQLite には、正規表現を使用した部分文字列操作を行う関数もいくつか用意されています。 例えば、REGEXP
関数は、正規表現と一致する部分文字列を返します。
SELECT
name,
REGEXP(name, '[A-Za-z]{3}') AS first_three_letters
FROM customers;
このクエリは、customers
テーブルから名前と、名前の先頭の 3 文字 (英字) を返します。
これらの方法は、それぞれ異なる用途に適しています。 状況に応じて適切な方法を選択してください。
sqlite