ソフトウェア開発者の日常

こだわりなく書きたいことを書いていきます。

PostgreSQL:正規表現を使ってデータを抽出

以下のようなデータがあった際に、SQLでcountryの重複を除外してデータを取得すると、「-」が最初になってしまいます。

SELECT DISTINCT country FROM table1 

country city
United States of America New York
United States of America Chicago
United States of America San Francisco
Japan Nagoya
Japan Tokyo
- none

f:id:AJYA:20180613124915p:plain
unsplash-logoFarrel Nobel

ソートキーをつける

以前の記事にも書きましたが、UNIONで結合するときにソートキーを追加しすると、希望した通りに並び替えられました。

SELECT DISTINCT country, 1 AS sortkey FROM table1 
WHERE country <> '-'
UNION
SELECT DISTINCT country, 2 AS sortkey FROM table1 
WHERE country = '-'
ORDER BY sortkey, country;

ajya.hatenablog.jp

抽出条件を正規表現にする

最後のデータが「-」ではなく違う記号になった場合に対応が必要なので、WHEREの条件を正規表現にして、英字か英字以外かを判定して抽出するようにしました。

SELECT DISTINCT country, 1 AS sortkey FROM table1 
WHERE country ~ '[a-zA-Z]'
UNION
SELECT DISTINCT country, 2 AS sortkey FROM table1 
WHERE country !~ '[a-zA-Z]'
ORDER BY sortkey, country;


これまで正規表現で抽出したことがありませんでしたが、使い方がわかると便利でした。