住所を北から並べる(都道府県コード または 郵便番号と電話番号)

SQLで顧客情報の検索結果を並び替える

都道府県コード順に並べる場合、都道府県コードのテーブル(1, 北海道)等に連結するのが正しいやり方
(下は住所の先頭2文字あたりで連結している)

SELECT *
FROM cust_table LEFT JOIN area_table ON SUBSTR(cust_table.jusyo, 1, 2) = SUBSTR(area_table.areaname, 1, 2)
WHERE ...
ORDER BY areaindex;

ただし、住所が都道府県から入っている必要あり、入っていないと先頭にきます
都道府県コードに郵便番号や市外局番なんかも入れておくとよいかもね


そんなの面倒くせ~とか、テーブル追加できない場合 → 郵便番号と電話番号でなんとかしてみる

どちらも都道府県コードとは並びが違います
郵便番号 = 北陸、東北や北海道の一部が、九州沖縄より後ろになる
電話番号 = 中国、九州の並びがおかしくなる

電話番号の市外局番が 01 か 02 で始まらない所は、電話番号の 左2桁
それ以外は、電話番号順(全桁)でソート
次に郵便番号でソート

この組み合わせで 「北陸東北北海道は電話番号、それ以外は郵便番号」なソートになります

SELECT * FROM cust_table
ORDER BY
CASE
WHEN (SUBSTR(phone, 2, 1) <> '1') AND (SUBSTR(phone, 2, 1) <> '2') THEN SUBSTR(phone, 1, 2)
ELSE phone ';
END,
zipcode;

で、何となく北からブロック毎に分かれてくれます
あれ?北陸あたりが...

コメント