🐈
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