この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
データアナリティクス事業本部の荒木です。
Redshiftで日付でデータ絞るときの関数を使う機会があったのでまとめたいと思います。
関数
・今日の日付取得
SELECT GETDATE()
現在の日付の完全なタイムスタンプで取得することができます。
SELECT GETDATE();
|date |
+--------------------------+
|2022-11-22 15:02:05.000 |
SELECT CURRENT_DATE
今日の日付を年、月、日で取得することができます。
SELECT CURRENT_DATE;
|date |
+-------------+
|2022-10-01 |
GETDATE()
で得たタイムスタンプをTRUNC()
と一緒に使用することで年、月、日だけに絞ることもできます。
SELECT TRUNC(GETDATE());
|date |
+-------------+
|2022-10-01 |
・指定したdatepartに基づいて切り捨てられた日付取得
SELECT DATE_TRUNC('datepart', timestamp)
指定したdatepartによって切り捨てられたタイムスタンプを取得できます。
SELECT DATE_TRUNC('day', DATE'2022-11-22 15:02:05.000');
|date |
+--------------------------+
|2022-11-22 00:00:00.000 |
・指定した日付部分のみを取得
SELECT DATE_PART(datepart, {date|timestamp})
指定したdatepartによって指定した日付の値を取得できます。
SELECT DATE_PART('day', DATE'2022-11-22 15:02:05.000');
|date |
+-----+
|11 |
・指定した日付部分に値を加える
SELECT DATEADD(datepart, interval, {date|time|timetz|timestamp})
指定したdatepartによって指定した日付に値を加えることができます。
SELECT DATEADD('day', 10 , DATE'2022-11-22 15:02:05.000');
|date |
+--------------------------+
|2022-12-02 00:00:00.000 |
サンプルコード
日付データを基準にデータ絞るコードを書いてみました。
月を指定したDATE_TRUNC
に今日の月を基準に6か月前から3か月前までを指定しています。
DATEADD
は負の値を指定することもできます。
日にちまで指定したければDATEADD
で指定した日数を指定することができます。
SELECT * from {schema}.{table}
where date_col BETWEEN
DATEADD('day', 10, DATEADD('mon', -6, DATE_TRUNC('mon', CURRENT_DATE)))
and
DATEADD('day', 10, DATEADD('mon', -3, DATE_TRUNC('mon', CURRENT_DATE)))
まとめ
実際に使った関数についてまとめてみました。
何かの参考になればと思います。