🖥
Bigquery | LegacySQL から StandardSQL への移行メモ (時刻系いくつか)
関数のカッコ
Legacy
省略できない。
SELECT
TIMESTAMP('2017-04-01 00:00:00.000000'),
CURRENT_TIMESTAMP()
Standard
省略できる。 (引数が0個-1個の場合のみ?)
TIMESTAMP
の例など、見かけ的に型を表しているようで、より記述的に書けるようになった。
SELECT
TIMESTAMP '2017-04-01 00:00:00.000000',
CURRENT_TIMESTAMP
PARSE_UTC_USEC => UNIX_MICROS
Legacy
SELECT PARSE_UTC_USEC('2017-04-01 00:00:00.000001')
# 1491004800000001
Standard
SELECT UNIX_MICROS(TIMESTAMP '2017-04-01 00:00:00.000001')
# 1491004800000001
DATE_ADD => TIMESTAMP_ADD
Legacy
SELECT DATE_ADD(CURRENT_TIMESTAMP(), 9, 'HOUR')
# 2017-04-12 15:36:19 UTC
今思えば DATE_ADD
って関数名なのに、HOUR や MINUTE 等も与えることが出来るのは、直感的じゃなかった。
Standard
SELECT TIMESTAMP_ADD(CURRENT_TIMESTAMP(), INTERVAL 9 HOUR)
# 2017-04-12 15:36:19 UTC
TIMESTAMP型を操作していることが、直接分かる関数名になった。(ちなみに DATETIME_ADD
もある)
WHERE で TIMESTAMP型 をマイクロセカンド秒まで比較する
Legacy
TIMESTAMP型のデータに対して、マイクロセカンドでの比較ができた。
SELECT
*
FROM (
SELECT
TIMESTAMP('2017-04-01 00:00:00.000000') AS target )
WHERE
target >= 1491004800000000
Standard
TIMESTAMP型はTIMESTMAP型で比較する必要がある。
(ちなみにLegacySQLでも同じ書き方は出来ていた)
SELECT
*
FROM (
SELECT
TIMESTAMP '2017-04-01 00:00:00.000000' AS target)
WHERE
target >= TIMESTAMP '2017-04-01 00:00:00.000000'
参照
Legacy
Standard
- Query Syntax | BigQuery Documentation | Google Cloud Platform
- Functions & Operators | BigQuery Documentation | Google Cloud Platform
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2017-04-12
Discussion