BigQueryの日付関数についてよく使うものを備忘録としてまとめました。
現在の日時
SELECT CURRENT_DATE() AS cur_d,
CURRENT_DATETIME() AS cur_dt,
CURRENT_TIMESTAMP() AS cur_ts
+-------------+----------------------------+--------------------------------+
| cur_d | cur_dt | cur_ts |
+-------------+----------------------------+--------------------------------+
| 2020-09-20 | 2020-09-21T12:34:56.123456 | 2020-09-21 12:34:56.123456 UTC |
+-------------+----------------------------+--------------------------------+
現在の日時を YYYY-MM-DD HH:MM:SS形式で表示
SELECT FORMAT_DATETIME("%Y-%m-%d %H:%M:%S", CURRENT_DATE()) AS fmt_d,
FORMAT_DATETIME("%Y-%m-%d %H:%M:%S", CURRENT_DATETIME()) AS fmt_dt,
FORMAT_TIMESTAMP("%Y-%m-%d %H:%M:%S", CURRENT_TIMESTAMP()) AS fmt_ts
+---------------------+---------------------+---------------------+
| fmt_d | fmt_dt | fmt_ts |
+---------------------+---------------------+---------------------+
| 2020-09-20 00:00:00 | 2020-09-20 12:34:56 | 2020-09-20 12:34:56 |
+---------------------+---------------------+---------------------+
タイムゾーンを日本にする
SELECT CURRENT_DATETIME() AS before,
CURRENT_DATETIME('Asia/Tokyo') AS after_dt,
FORMAT_TIMESTAMP('%Y-%m-%d %H:%M:%S', CURRENT_TIMESTAMP(), 'Asia/Tokyo') AS after_ts,
CURRENT_DATE('Asia/Tokyo') AS after_d
+----------------------------+----------------------------+---------------------+---------------------+
| before | after_dt | after_ts | after_d |
+----------------------------+----------------------------+---------------------+---------------------+
| 2020-09-21T12:34:56.123456 | 2020-09-21T21:34:56.123456 | 2020-09-21 21:34:56 | 2020-09-21 |
+----------------------------+----------------------------+---------------------+---------------------+
現在の日時を日(時分秒は全て0)で丸める
SELECT DATETIME_TRUNC(CURRENT_DATETIME(), DAY) AS dt_trc,
TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), DAY) AS ts_trc
+---------------------+-------------------------+
| dt_trc | ts_trc |
+---------------------+-------------------------+
| 2020-09-20T00:00:00 | 2020-09-21 00:00:00 UTC |
+---------------------+-------------------------+
現在の日時から 年
、 月
、 日
を抜き出す
SELECT EXTRACT(YEAR FROM CURRENT_DATETIME()) AS year,
EXTRACT(MONTH FROM CURRENT_DATETIME()) AS month,
EXTRACT(DAY FROM CURRENT_DATETIME()) AS day
+------+-------+-----+
| year | month | day |
+------+-------+-----+
| 2020 | 09 | 20 |
+------+-------+-----+
※TIMESTAMP も同様
現在の日時に日を加算
SELECT DATE_ADD(CURRENT_DATE(), INTERVAL 1 DAY) AS d_add,
DATETIME_ADD(CURRENT_DATETIME(), INTERVAL 1 DAY) AS dt_add,
TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 1 DAY) AS ts_add
+-------------+----------------------------+--------------------------------+
| d_add | dt_add | ts_add |
+-------------+----------------------------+--------------------------------+
| 2020-09-21 | 2020-09-21T12:34:56.123456 | 2020-09-21 12:34:56.123456 UTC |
+-------------+----------------------------+--------------------------------+
日付型から文字列へ変換
SELECT CURRENT_DATETIME() AS before,
CAST(CURRENT_DATETIME() AS STRING) AS after
+----------------------------+----------------------------+
| before | after |
+----------------------------+----------------------------+
| 2020-09-21T12:34:56.123456 | 2020-09-21 12:34:56.123456 |
+----------------------------+----------------------------+
文字列から日付型(DATE型、DATETIME型、TIMESTAMP型)へ変換
SELECT PARSE_DATE("%Y%m%d", "20200920") AS prs_d,
PARSE_DATETIME("%Y%m%d %H%M%S", "20200920 123456") AS prs_dt,
PARSE_TIMESTAMP("%Y%m%d %H%M%S", "20200920 123456") AS prs_ts
+-------------+---------------------+-------------------------+
| prs_d | prs_dt | prs_ts |
+-------------+---------------------+-------------------------+
| 2020-09-21 | 2020-09-21T12:34:56 | 2020-09-21 12:34:56 UTC |
+-------------+---------------------+-------------------------+
DATETIME型 から TIMESTAMP型へ変換
SELECT CURRENT_DATETIME() AS before,
TIMESTAMP(CURRENT_DATETIME()) AS after
+----------------------------+--------------------------------+
| before | after |
+----------------------------+--------------------------------+
| 2020-09-21T12:34:56.123456 | 2020-09-21 12:34:56.123456 UTC |
+----------------------------+--------------------------------+
TIMESTAMP型 から DATE型へ変換
SELECT CURRENT_TIMESTAMP() AS before,
DATE(CURRENT_TIMESTAMP(), "Asia/Tokyo") AS after
+----------------------------+-------------+
| before | after |
+----------------------------+-------------+
| 2020-09-21T15:00:00.000000 | 2020-09-22 |
+----------------------------+-------------+
TIMESTAMP型 から DATETIME型へ変換
SELECT CURRENT_TIMESTAMP() AS before,
DATETIME(CURRENT_TIMESTAMP(), "Asia/Tokyo") AS after
+----------------------------+-------------+
| before | after |
+----------------------------+-------------+
| 2020-09-21T15:00:00.000000 | 2020-09-22 |
+----------------------------+-------------+