LoginSignup
4
3

More than 1 year has passed since last update.

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

Last updated at Posted at 2017-04-12

関数のカッコ

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オープンチャットもご利用ください。

Twitter

4
3
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
4
3