Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

関数のカッコ

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

YumaInaura
Ruby on Rails 業務経験 約5年 / Perl PHP Python Golang Linux Apache MySQL BigQuery Jenkins ansible AWS など / いなうらゆうま / YumaInaura / 稲浦悠馬
http://twitter.com/yumainaura
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away