郵便番号のデータをMySQLに入れることでいつでも郵便番号を探せるように
生まれつき頭の設計に問題があり、郵便番号が覚えられない身なので郵便番号をMySQLに入れた。
データの入手
日本郵政がデータを公開しているのでそれを使う。
郵便番号データダウンロード – 日本郵便
http://www.post.japanpost.jp/zipcode/download.html
データの入力
まず、zipを展開し、csvファイルを取り出す。
このcsvファイルは日本語版Windowsではお馴染みのShift-JISにCRLFという形式である。このままではMySQLにとっては都合が悪いので、nkf
コマンドで変換する。
1 |
nkf -w -Lu --overwrite KEN_ALL.csv |
その後、おもむろにMySQLを立ち上げ、データベースとテーブルを作成する。
ただし、ログイン時に--local-infile=1
というオプションをつけなければいけない。
作成したテーブルにcsvファイルを読み込んでデータを入力する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
CREATE DATABASE zipcode_db; USE zipcode_db; CREATE TABLE address ( local_goverment_code INT NOT NULL, old_zipcode VARCHAR(6) NOT NULL, zipcode CHAR(8) NOT NULL, prefectures_kana VARCHAR(64) NOT NULL, city_kana VARCHAR(64) NOT NULL, town_kana VARCHAR(64) NOT NULL, prefectures VARCHAR(64) NOT NULL, city VARCHAR(64) NOT NULL, town VARCHAR(64) NOT NULL, flag1 TINYINT NOT NULL, flag2 TINYINT NOT NULL, flag3 TINYINT NOT NULL, flag4 TINYINT NOT NULL, flag5 TINYINT NOT NULL, flag6 TINYINT NOT NULL ); LOAD DATA LOCAL INFILE 'KEN_ALL.CSV' INTO TABLE address FIELDS TERMINATED BY ',' ENCLOSED BY '"'; |
検索
試しに「山口県光市島田」の郵便番号を探してみよう。
とりあえず町域が「島田」のものを探してみよう。
1 |
SELECT zipcode, prefectures, city, town, town_kana FROM address WHERE town='島田'; |
結果はこうなる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
+---------+--------------+-----------------------+--------+-----------+ | zipcode | prefectures | city | town | town_kana | +---------+--------------+-----------------------+--------+-----------+ | 0380223 | 青森県 | 南津軽郡大鰐町 | 島田 | シマダ | | 9811503 | 宮城県 | 角田市 | 島田 | シマダ | | 9997754 | 山形県 | 東田川郡庄内町 | 島田 | シマダ | | 3230004 | 栃木県 | 小山市 | 島田 | シマダ | | 3500211 | 埼玉県 | 坂戸市 | 島田 | シマダ | | 2900506 | 千葉県 | 市原市 | 島田 | シマダ | | 2760005 | 千葉県 | 八千代市 | 島田 | シマダ | | 9540155 | 新潟県 | 長岡市 | 島田 | シマダ | | 9550842 | 新潟県 | 三条市 | 島田 | シマダ | | 9430853 | 新潟県 | 上越市 | 島田 | シマダ | | 9591965 | 新潟県 | 阿賀野市 | 島田 | シマダ | | 9398223 | 富山県 | 富山市 | 島田 | シマダ | | 5020917 | 岐阜県 | 岐阜市 | 島田 | シマダ | | 4680056 | 愛知県 | 名古屋市天白区 | 島田 | シマダ | | 5110936 | 三重県 | 桑名市 | 島田 | シマダ | | 6130043 | 京都府 | 久世郡久御山町 | 島田 | シマタ | | 6491527 | 和歌山県 | 日高郡印南町 | 島田 | シマダ | | 7430063 | 山口県 | 光市 | 島田 | シマタ | | 8330037 | 福岡県 | 筑後市 | 島田 | シマダ | | 8612224 | 熊本県 | 上益城郡益城町 | 島田 | シマダ | | 8710033 | 大分県 | 中津市 | 島田 | シマタ | +---------+--------------+-----------------------+--------+-----------+ |
いっぱい出てきた。
同じ「島田」でも読み方が「シマダ」のものと「シマタ」のものがある。
山口県の光市の島田のことは分かっているので、AND
演算子で絞り込みをする。
1 |
SELECT zipcode, prefectures, city, town, town_kana FROM address WHERE prefectures='山口県' AND city='光市' AND town='島田'; |
すると1つに特定できる。
1 2 3 4 5 |
+---------+-------------+--------+--------+-----------+ | zipcode | prefectures | city | town | town_kana | +---------+-------------+--------+--------+-----------+ | 7430063 | 山口県 | 光市 | 島田 | シマタ | +---------+-------------+--------+--------+-----------+ |
ワイルドカードの%
を使うことで、広島市の郵便番号一覧を出すこともできる。
1 |
SELECT zipcode, prefectures, city, town FROM address WHERE city like '広島市%区'; |