🖥

Bigquery | LegacySQL から StandardSQL への移行メモ (時刻系いくつか)

2023/08/26に公開

関数のカッコ

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

チャットメンバー募集

何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ

Twitter

https://twitter.com/YumaInaura

公開日時

2017-04-12

Discussion