🐈
PostgreSQLで`timestamp`型のカラム`created_at`から現在時刻までの経過日数を取得する
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