SQL Server

【SQL Server】住所から都道府県を抜き出すSQLスクリプト

SQLの文法
記事内に商品プロモーションを含む場合があります

客先や業者からデータ一覧をもらった際、住所が1つのフィールドに格納されている場合があります。

本来は都道府県・市区町村・番地以降のように住所は3つ以上の項目に分かれていた方が何かと便利です。

そこで、住所が1つのフィールドに入っている場合に、都道府県名のみを取り出すSQL文を作成します。

2通りのSQL文がありますので条件に合う方でどうぞ。

住所の左から4文字または3文字取り出す

必ず住所に都道府県が入っていることが明確な場合は以下の数式で取り出せます。

 Left([住所],IIf(Mid([住所],4,1)=”県”,4,3))

※47都道府県のうち、「都道府県」の文字を含めて4文字になるのは「神奈川県」「和歌山県」「鹿児島県」の3つだけです。

都道府県名が4文字なのは、4文字目が「県」である場合しかありませんので、4文字目が「県」なら先頭から4文字を取得。そうでない場合は3文字を取得すれば都道府県名が取り出せます。

住所の中から「道府県」の文字が出現するまでの長さで文字列を切り取る

住所の中に都道府県が入っていない可能性がある場合は以下のSQLでいかがでしょうか?

自宅住所の1文字目から「県・府・道」の文字が出現するまでの長さを切り取ります。

ただし、以下の場合はNULLを返します。

  • 住所から「県・府・道」が取得できなかった場合
  • 「県・府・道」が出現した文字位置が5以上だった場合

東京都の「都」を判断に入れると、「京都府」の扱いが判断順に左右されるため、東京都のみ別途判断する。(「都」は1つしかないため)

SUBSTRING(住所,1,
CASE
WHEN CHARINDEX('東京都', 住所) <> 0 THEN 3
WHEN CHARINDEX('県',住所)<>0 THEN 
     CASE WHEN CHARINDEX('県',住所)>4 THEN 0 
     ELSE CHARINDEX('県',住所) END
WHEN CHARINDEX('府',住所)<>0 THEN 
     CASE WHEN CHARINDEX('府',住所)>4 THEN 0 
     ELSE CHARINDEX('府', 住所) END
WHEN CHARINDEX('道',住所)<>0 THEN 
     CASE WHEN CHARINDEX('道',住所)>4 THEN 0 
     ELSE CHARINDEX('道', 住所) END
ELSE 0
END) AS 都道府県

 

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。