Yukiです。
今日は日付と時刻の関数について勉強します。
Photo by Mylon Ollila on Unsplash
日付・時刻の取得
日付・時刻の取得関数には、3種類あります。
トランザクション開始時を取得するもの。
SQL開始時。
関数実行時。
これら3つです。
トランザクション開始時
以下はトランザクション開始時を取得します。後の2つのタイプの方が少数派なので、そちらで覚えておけばよさそうです。
- now()
- current_timestamp
- current_date
- current_time
- localtimestamp
- localtime
now()はPostgreSQLの伝統的な関数だそうです。
current~とlocal~の違いは、current~が時間帯(タイムゾーン)を伴うのに対し、local~は時間帯(タイムゾーン)をともないません。
あと、current_dateはあるけど、localdateはないんですね。
SQL開始時
- statement_timestamp() タイムスタンプ
SQL開始時のタイムスタンプです。
SQL内で何度呼んでも、同じ日時になります。
関数実行時
- clock_timestamp()
関数実行時のタイムスタンプです。
同じSQL内でも呼び出しごとに時刻が変わります。
定義した関数内で使うと、毎回違う時刻が取れたりするのでしょうか。
差の計算
- age(<終了日時>, <開始日時>)
2つのタイムスタンプの差を求める関数です。
ageというネーミングが面白いですね。
2つの引数は左から右を引く形になっています。
部分の取得
- extract(<フィールド> from <タイムスタンプ>)
- date_part(<フィールド>, <タイムスタンプ>)
年、月、日、時、分、秒など、日時から一部のフィールドだけ取り出します。
extractの方が標準SQLで、どちらも同じ機能です。
変換
日時、文字列、数値を互いに変換するための関数です。
Oracleとあまり変わらないですね。
- to_char()
- to_date(), to_timestamp()
- to_number()
まとめ
今回は日付・時刻の関数や変換関数について学びました。
SQLを書くときに、けっこう活用することになりそうです。
参考
PostgreSQL 13.1 文書
第9章 関数と演算子
9.9. 日付/時刻関数と演算子
表9.32 日付/時刻関数演算子
コメント