【BigQuery】日付・時刻の取得・計算まとめ

BigQueryの日付・時刻の取得やフォーマット、計算の使い方をまとめました。

内容は随時追加していきます。

日付・時刻を取得/生成する

現在日付

SELECT CURRENT_DATE() -- 例)2025-04-09

現在日時

SELECT CURRENT_DATETIME() -- 例)2025-07-10T02:20:17.690046

数字から日付を生成する

SELECT DATE(2025, 6, 12) -- 2025-06-12

文字列から日付を生成する

SELECT DATE('2025-04-01') -- 2025-04-01

なお、明示的に型変換してあげなくても、日付系関数では文字列を日付型として処理してくれたりします。

○○を取得する/フォーマット

SELECT EXTRACT(YEAR FROM DATE('2025-05-17')) -- 2025

下記でも取得できます。
この場合、文字列型になります。

SELECT FORMAT_DATE('%Y', '2025-05-17') -- 2025

SELECT EXTRACT(MONTH FROM DATE('2025-05-17')) -- 5

下記でも取得できます。
この場合、文字列型になります。

SELECT FORMAT_DATE('%m', '2025-05-17') -- 05

SELECT EXTRACT(DAY FROM DATE('2025-05-17')) -- 17

曜日

SELECT
  FORMAT_TIMESTAMP('%w', '2025-08-31'), -- 0
  FORMAT_TIMESTAMP('%u', '2025-08-31'), -- 7
  FORMAT_TIMESTAMP('%A', '2025-08-31'), -- Sunday
  FORMAT_TIMESTAMP('%a', '2025-08-31')  -- Sun

フォーマット出力例説明
%w0~6数値(0=日曜)
%u1~7数値(1=月曜)
%ASunday曜日のフルネーム
%aSun曜日の略称

切り捨て(初日を取得)

月の初日(月未満を切り捨て)

SELECT DATE_TRUNC('2025-06-15', MONTH) -- 2025-06-01

年の初日(年未満を切り捨て)

SELECT DATE_TRUNC('2025-06-15', YEAR) -- 2025-01-01

TIME型の秒未満を切り捨て

SELECT TIME_TRUNC(TIME(TIMESTAMP_MICROS(1757781140469400)), SECOND) -- 16:32:20

加算・減算

n日後・n日前

SELECT
  DATE('2025-04-01') + 1, -- 2025-04-02
  DATE('2025-04-01') - 1  -- 2025-03-31

ATE_ADD関数、DATE_SUB関数を使った書き方もできます。

SELECT
  DATE_ADD('2025-04-01', INTERVAL 1 DAY), -- 2025-04-02
  DATE_SUB('2025-04-01', INTERVAL 1 DAY)  -- 2025-03-31

n年後・n年前

SELECT
  DATE_ADD('2025-04-01', INTERVAL 1 YEAR), -- 2026-04-01
  DATE_SUB('2025-04-01', INTERVAL 1 YEAR)  -- 2024-04-01

n時間後・n時間前

SELECT
  DATETIME_ADD('2025-09-01 12:00:00', INTERVAL 13 HOUR), -- 2025-09-02T01:00:00
  DATETIME_SUB('2025-09-01 12:00:00', INTERVAL 13 HOUR); -- 2025-08-31T23:00:00

日数の間隔を計算(日数・月数計算)

日数計算

SELECT DATE_DIFF('2025-01-31', '2025-01-01', DAY) -- 30

月数計算

SELECT DATE_DIFF('2025-02-01', '2025-01-01', MONTH) -- 1

以上になります。
お読み頂き、ありがとうございました。