PostgreSQL 数値(yyyymmdd)を日付に変換する
PostgreSqlで曜日を表すカラムを数値型(yyyymmdd形式)で作成する場合があります。それを日付に変換する方法を紹介します。
元のテーブル
SQL文の結果
しかし毎回、上記のようなSQL文を書くのも面倒なので、functionを作成して使用するのが便利かもしれません。
作成したファンクションを利用した結果です。
他にもfunctionに引数を追加して、日付フォーマットを指定できるようにすれば、汎用性を増すことができます。試してみてください。
SQL文
1 2 3 4 5 6 7 | select ymd , to_char(to_date(to_char(ymd, '00000000' ), 'YYYYMMDD' ), 'YYYY年MM月DD日' ) || '(' || (ARRAY[ '日' , '月' , '火' , '水' , '木' , '金' , '土' ])[extract( 'dow' FROM to_date(to_char(ymd, '00000000' ), 'YYYYMMDD' )) + 1] || ')' as str_ymd from t_test order by id |
SQL文の結果
無事に数値型の列が文字型の日付に変換されています。 |
しかし毎回、上記のようなSQL文を書くのも面倒なので、functionを作成して使用するのが便利かもしれません。
function
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | -- 日付変換関数 create or replace function f_ymdntos(n_ymd integer ) returns varchar as $$ declare s_ymd varchar ; s_weekday varchar ; begin -- 日付部分作成 select into s_ymd to_char(to_date(to_char(n_ymd, '00000000' ), 'YYYYMMDD' ), 'YYYY年MM月DD日' ); -- 曜日作成 select into s_weekday (array[ '日' , '月' , '火' , '水' , '木' , '金' , '土' ])[extract(dow from to_date(to_char(n_ymd, '00000000' ), 'YYYYMMDD' )) + 1]; return s_ymd || '(' || s_weekday || ')' ; end ; $$ language 'plpgsql' ; |
作成したファンクションを利用した結果です。
1 2 3 4 5 6 7 8 9 10 11 | select id , ymd , to_char(to_date(to_char(ymd, '00000000' ), 'YYYYMMDD' ), 'YYYY年MM月DD日' ) || '(' || (ARRAY[ '日' , '月' , '火' , '水' , '木' , '金' , '土' ])[extract( 'dow' FROM to_date(to_char(ymd, '00000000' ), 'YYYYMMDD' )) + 1] || ')' as str_ymd , f_ymdntos(ymd) as str_ymd2 from t_test order by id |
SQL文は短くなりすっきりしました。結果も同じですね。 |
他にもfunctionに引数を追加して、日付フォーマットを指定できるようにすれば、汎用性を増すことができます。試してみてください。
コメント
コメントを投稿