はじめに
最後の一文字を除いたデータを抽出するSQLを書くことが稀にあるので簡易的に紹介します。
最後の一文字を除いてデータ抽出
以下のように、市区町村が格納された簡易テーブルがあるとします。
id | city |
---|---|
1 | 世田谷区 |
2 | 東村山市 |
3 | 町田市 |
以下のクエリ実行で、最後の一文字である市区町村を除いたデータが取得できます。
SELECT SUBSTRING(city, 1, CHAR_LENGTH(city) - 1) FROM tabel_name;
結果
city |
---|
世田谷 |
東村山 |
町田 |
SUBSTRING関数を使用してcity列の1番目の文字から、city列の文字数 - 1番目の文字までの部分文字列を抽出しています。
世田谷区であれば、世〜谷を抽出することになります。
応用??
以下から、最後の一文字以外に「市」「区」「町」「村」を持つcityのデータを抽出します。
id | city |
---|---|
1 | 世田谷区 |
2 | 東村山市 |
3 | 町田市 |
例えば、2番の東村山市は「市」以外に「村」が含まれるので抽出します。
それでは以下のクエリを実行します。
SELECT id, city, city_substring
FROM (
SELECT id, city, SUBSTRING(city, 1, CHAR_LENGTH(city) - 1) AS city_substring
FROM tabel_name
) AS sub
WHERE city_substring LIKE '%市%' OR city_substring LIKE '%区%' OR city_substring LIKE '%町%' OR city_substring LIKE '%村%';
結果
id | city | city_substring |
---|---|---|
2 | 東村山市 | 東村山 |
3 | 町田市 | 町田 |
FROM句の中のサブクエリで、idとcityに加え、cityの最後の文字を取り除いた部分文字列 city_substringを取得しています。
サブクエリで取得したcity_substringのうち市区町村の文字列を含む行を
WHERE句とLIKE句を使用してフィルタリングします。
結果、最後の一文字以外に「市」「区」「町」「村」を持つcityのデータが判明しました。
上記のデータは例えば、住所から市区町村を抽出する正規表現のパターンに使用しますが
本記事の主旨とは少し逸れるため、詳細は別の記事で紹介できればと思います。