日付・時刻関数

Redshift入門

Jason Myers

Principal Architect

現在の日時の取得

  • SYSDATE トランザクション開始時の日時
-- 現在の日時を取得
SELECT SYSDATE;
timestamp
============================
2024-01-27 20:05:55.976353
  • GETDATE() ステートメント開始時の日時。かっこが必須
-- 現在の日時を取得
SELECT GETDATE();
timestamp
============================
2024-01-27 20:06:55.976353
Redshift入門

日付・時刻関数の挙動

リーダーノード専用関数に注意

  • AGE より DATEDIFF
  • リーダー専用より GETDATE/SYSDATE を推奨:
    • CURRENT_TIME
    • CURRENT_TIMESTAMP
    • ISFINITE
    • LOCALTIME
    • LOCALTIMESTAMP
    • NOW
Redshift入門

日付と時刻の切り捨て

  • TRUNC は timestamp から date を返す
-- 現在の日付を取得(基準 SYSDATE: 2024-01-27 20:05:55.976353)
SELECT TRUNC(SYSDATE);

2024-01-27
  • DATE_TRUNC('datepart', timestamp) は時・日などの datepart に切り捨て

-- 分に切り捨て(基準 SYSDATE: 2024-01-27 20:05:55.976353) SELECT DATE_TRUNC('minute', SYSDATE);


----CODE_GLUE----
```{out}
2024-01-27 20:05:55

1 https://docs.aws.amazon.com/redshift/latest/dg/r_Dateparts_for_datetime_functions.html
Redshift入門

日付・タイムスタンプの一部を取得

  • DATE_PART(datepart, date or timestamp)
    • 日付/タイムスタンプから指定部分を抽出
-- 現在の月を取得(基準 SYSDATE: 2024-01-27 20:05:55.976353)
SELECT DATE_PART(month, SYSDATE);

1
  • 返せるのは month, day, year だけではない
    • 例: dayofweek, quarter, timezone
-- 現在の曜日を取得(基準 SYSDATE: 2024-01-27 20:05:55.976353)
SELECT DATE_PART(dayofweek, SYSDATE);

6
Redshift入門

日付と時刻の比較

  • DATE_CMP(date_1, date_2) 相対比較

    • date_1 が早いと -1
    • 等しいと 0
    • date_1 が遅いと 1
  • 型別の関数

    • DATE_CMP_TIMESTAMP
    • DATE_CMP_TIMESTAMPTZ
    • TIMESTAMP_CMP
    • TIMESTAMP_CMP_TIMESTAMPTZ
    • TIMESTAMPTZ_CMP
-- 5 つの日付を比較(基準 SYSDATE: 2024-01-27 20:05:55.976353)
  SELECT date_col, 
         TRUNC(SYSDATE) AS current_date,
         DATE_CMP(date_col, SYSDATE)
    FROM combined_history_projections
ORDER BY date_col
   LIMIT 3;

date_col | current_date | date_cmp ===========|===============|========== 2024-01-26 | 2024-01-27 | -1 2024-01-27 | 2024-01-27 | 0 2024-01-28 | 2024-01-27 | 1
Redshift入門

差分の計算

  • DATEDIFF(datepart, value_1, value_2)
  • どちらにも date, time, timetz, timestamp を指定可
    • 指定の datepart を含む必要あり
  • 返り値
    • value_2 が早いと負
    • 等しいと 0
    • value_2 が遅いと正
Redshift入門

DATEDIFF の使用

-- 第1四半期末までの日数(基準 SYSDATE: 2024-01-27 20:05:55.976353)
SELECT DATEDIFF(day,TRUNC(SYSDATE),'2024-03-31') AS days_diff;

days_diff =========== 64
Redshift入門

日付と時刻の加算

  • DATEADD(datepart, quantity, value)
  • date, time, timetz, timestamp をサポート
  • quantity は負で減算も可
-- 日付に週を加算(基準 SYSDATE: 2024-01-27 20:05:55.976353)
SELECT TRUNC(SYSDATE) AS todays_date,
       TRUNC(DATEADD(week, 1, SYSDATE)) AS next_weeks_date;

todays_date | next_weeks_date ============|================== 2024-01-27 | 2024-02-03
Redshift入門

日付と時刻の加算の注意点

  • うるう年を月単位で加算すると月末に切上げ
-- 月単位で 1 年を加算
SELECT DATEADD(month, 12, '2024-02-29');
2025-02-28 00:00:00
  • うるう年を年単位で加算すると翌日
-- 年単位で 1 年を加算
SELECT DATEADD(year, 1, '2024-02-29');
2025-03-01 00:00:00
Redshift入門

¡Vamos a practicar!

Redshift入門

Preparing Video For Download...