LoginSignup
7
4

More than 1 year has passed since last update.

BigQueryの日付関数

Last updated at Posted at 2020-09-24

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  |
+----------------------------+-------------+
7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4