PostgreSQL - 日付/時間関数と演算子

こんにちは、未来のプログラマーたち!今日は、PostgreSQLにおける日付と時間の世界に興味深い旅を楽しみましょう。あなたの近所の親切なコンピュータサイエンスの先生として、過去15年間の教室での情熱を持って、これらの概念をガイドします。さあ、仮想のメモ pad を準備して、一緒に飛び込みましょう!

Date/Time Functions & Operators

PostgreSQLにおける日付と時間の理解

関数や演算子を探求する前に、まず日付と時間がプログラミングにおいてなぜ重要であるかを理解しましょう。タイムマシンを建造していると想像してみてください(素晴らしいでしょうよね?)。あなたは現在どこにいるのか、どこ(またはいつ)に行きたいのかを知る必要があります。データベースでの私たちのやることは基本的にこれと同じです - いつ何が起こるか、どれだけの時間がかかるか、そして未来の出来事を予測することです。

それでは、PostgreSQLの最も便利な日付と時間関数を見てみましょう。

AGE(timestamp, timestamp)とAGE(timestamp)

AGE関数は、いつ何が起こったかを常に覚えているような友達です。2つのタイムスタンプ間、またはタイムスタンプと現在の日付間の差を計算します。

例1: 年齢の計算

SELECT AGE(TIMESTAMP '2023-05-15', TIMESTAMP '1990-01-01');

これは以下のような結果を返します:

33 years 4 months 14 days

ここで何が起こっているのでしょうか?私たちはPostgreSQLに、1990年1月1日と2023年5月15日の時間差を計算するように依頼しています。まるで、「1990年1月1日に生まれた人は何歳になるか?」と尋ねているようなものです。

例2: 現在の日付からの年齢の計算

SELECT AGE(TIMESTAMP '1990-01-01');

これは1990年1月1日と現在の日付間の時間差を返します。まるで、「1990年1月1日に生まれた人は何歳?」と尋ねているようなものです。

現在の日付/時間関数

これらの関数は、データベースの内蔵クロックとカレンダーのようなものです。現在の時刻や日付を教えてくれます。

例3: 現在の日付と時間の取得

SELECT CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP;

これは今日の日付、現在の時刻、そして両方を返します。まるで、データベースに、「今日は何日、何時何分、そして現在の正確な瞬間は何か?」と尋ねているようなものです。

DATE_PARTとDATE_TRUNC関数

DATE_PARTは特定の日付や時間の部分を拡大するタイムマシンのようなものです。一方、DATE_TRUNCは時間を簡素化するタイムシンプリファイアのように、指定された時間単位に下方に丸めます。

例4: 日付の部分を抽出

SELECT DATE_PART('year', TIMESTAMP '2023-05-15 10:30:00');
SELECT DATE_PART('hour', TIMESTAMP '2023-05-15 10:30:00');

最初のクエリは2023を返し、2番目のクエリは10を返します。まるで、「このタイムスタンプは何年のものか?」と「このタイムスタンプは何時のものか?」と尋ねているようなものです。

例5: タイムスタンプの丸め

SELECT DATE_TRUNC('hour', TIMESTAMP '2023-05-15 10:30:00');

これは '2023-05-15 10:00:00' を返します。まるで、「このタイムスタンプをMinutesとSecondsを0にリセットしてくれ」と言っているようなものです。

EXTRACT関数

EXTRACTはDATE_PARTと似ていますが、少しだけ構文が異なります。日付や時間の特定の部分を引き出す別の方法です。

例6: タイムスタンプからの抽出

SELECT EXTRACT(YEAR FROM TIMESTAMP '2023-05-15 10:30:00');
SELECT EXTRACT(HOUR FROM TIMESTAMP '2023-05-15 10:30:00');

これらのクエリは2023と10をそれぞれ返します。DATE_PARTの例と同じ結果です。

ISFINITE関数

これらの関数は、データベースの現実の確認のようなものです。日付、タイムスタンプ、またはインターバルが実際の有限値なのか、特殊な無限値なのかを教えてくれます。

例7: 終わりなき確認

SELECT ISFINITE(DATE '2023-05-15');
SELECT ISFINITE(TIMESTAMP 'infinity');

最初のクエリはtrueを返し、2番目のクエリはfalseを返します。まるで、「2023年5月15日は実際の日付か?」(はい)と「無限は実際のタイムスタンプか?」(いいえ)と尋ねているようなものです。

JUSTIFY関数

これらの関数は、データベースの時間調整者のようなものです。おかしな値を持つインターバルをより標準的な表現に調整します。

例8: インターバルの調整

SELECT JUSTIFY_DAYS(INTERVAL '30 days');
SELECT JUSTIFY_HOURS(INTERVAL '36 hours');
SELECT JUSTIFY_INTERVAL(INTERVAL '1 month 36 hours');

これらは以下のような結果を返すかもしれません:

1 month
1 day 12 hours
1 month 1 day 12 hours

まるで、「これらの時間期間をより標準的な方法で表現してくれ」と言っているようなものです。

関数のまとめ

ここに、私たちが議論したすべての関数の便利な表格を示します:

関数 説明
AGE() タイムスタンプ間の差を計算
CURRENT_DATE 現在の日付を返す
CURRENT_TIME 現在の時刻を返す
CURRENT_TIMESTAMP 現在の日付と時間を返す
DATE_PART() 日付/時間の特定の部分を抽出
DATE_TRUNC() タイムスタンプを指定された精度に丸め
EXTRACT() 日付/時間の特定のフィールドを抽出
ISFINITE() 日付/時間/インターバルが有限か確認
JUSTIFY_DAYS() インターバルの日数を調整
JUSTIFY_HOURS() インターバルの時間を調整
JUSTIFY_INTERVAL() インターバル全体を調整

そして、ここまでです、皆さん!私たちは一緒に時間(関数)を旅しました。日付の部分を抽出し、無限の終わりなき確認を行い、インターバルを調整しました。データベースにおける日付と時間の操作は、ユーザーのアクティビティの追跡やイベントのスケジューリングなど、多くのアプリケーションにおいて非常に重要です。

あなたがプログラミングの旅を続ける中で、これらの関数は非常に便利です。時間操作のスイスアーミーナイフのような存在です。引き続き練習し、探求し続けてください。それでは、データベースの時間卿になるまでに!

Credits: Image by storyset