🐈

PostgreSQLで`timestamp`型のカラム`created_at`から現在時刻までの経過日数を取得する

2024/05/23に公開

PostgreSQLでtimestamp型のカラムcreated_atから現在時刻までの経過日数を取得する方法について。

タイムゾーンを指定しない場合

タイムゾーンを指定しない場合、NOW()関数やCURRENT_TIMESTAMPを使用して現在時刻を取得し、それとcreated_atの差を計算して経過日数を求めます。

クエリ例

SELECT
    created_at,
    EXTRACT(DAY FROM age(NOW(), created_at)) AS elapsed_days
FROM
    your_table_name;

または

SELECT
    created_at,
    EXTRACT(DAY FROM age(CURRENT_TIMESTAMP, created_at)) AS elapsed_days
FROM
    your_table_name;

解説

  • NOW()またはCURRENT_TIMESTAMP関数で現在時刻を取得します。
  • age()関数で2つの日付の差を求めます。
  • EXTRACT(DAY FROM ...)でその差を日数として抽出します。

タイムゾーンを指定する場合

特定のタイムゾーンを考慮して現在時刻を取得し、経過日数を計算する場合は、NOW()CURRENT_TIMESTAMPにタイムゾーンを指定します。

クエリ例

SELECT
    created_at,
    EXTRACT(DAY FROM age(NOW() AT TIME ZONE 'Asia/Tokyo', created_at)) AS elapsed_days
FROM
    your_table_name;

または

SELECT
    created_at,
    EXTRACT(DAY FROM age(CURRENT_TIMESTAMP AT TIME ZONE 'Asia/Tokyo', created_at)) AS elapsed_days
FROM
    your_table_name;

解説

  • NOW() AT TIME ZONE 'Asia/Tokyo'またはCURRENT_TIMESTAMP AT TIME ZONE 'Asia/Tokyo'を使用して、Asia/Tokyoタイムゾーンの現在時刻を取得します。
  • その後の処理はタイムゾーンを指定しない場合と同じです。

まとめ

PostgreSQLでtimestamp型のカラムから経過日数を取得するには、現在時刻を基準にしてage()関数を使い、その結果をEXTRACT()関数で日数として抽出します。タイムゾーンを指定する場合は、NOW()CURRENT_TIMESTAMPにタイムゾーンを明示的に指定します。これにより、特定のタイムゾーンにおける正確な経過日数を計算することができます。

Let's Happy Coding

Discussion