【BigQuery】標準SQLで日付処理をする
わたしへ。忘れてたでしょ。わたしより。
きも。
・日付を扱うための型として、timestamp型と、datetime型がある。timestamp型は年-月-日-時-分-秒まで扱えるが、datetime型は日まで。混同しない。
・日付計算にはDATETIME_SUB(datetime('地域名'),INTERVAL n DAY)を使う
・TIMESTAMP(datetime,"地域名")で、datetime型をtimestamp型に変換できる
・FORMAT_TIMESTAMP("%Y-%m-%d %H:%M:%s",timestamp)でtimestamp型の値を文字列に変換できる
・CURRENT_DATETIME("地域名")で、該当地域の「今日」を取得
・地域名を指定しないとUSTで計算されて、日本で実行したときに日付がずれるので、JSTになるよう地域には"Asia/Tokyo"を指定する。
全然実用的じゃない実用例
SELECT TIMESTAMP(
FORMAT_TIMESTAMP(
"%Y-%m-%d 00:00:00",
TIMESTAMP(DATETIME_SUB(
DATETIME_SUB(CURRENT_DATETIME("Asia/Tokyo"), INTERVAL 1 MONTH),
INTERVAL 1 DAY)
),
"Asia/Tokyo")
)
「今日の一ヶ月前、の、1日前」を取得する。
まず
DATETIME_SUB(CURRENT_DATETIME("Asia/Tokyo"), INTERVAL 1 MONTH)
で、「今日の一ヶ月前」を取得
それをさらに
DATETIME_SUB("今日の一ヶ月前" , INTERVAL 1 DAY)
で「一ヶ月前の1日前」を取得
さらにさらに
FORMAT_TIMESTAMP("%Y-%m-%d 00:00:00","一ヶ月の1日前")
で、一ヶ月の1日前の00:00:00時点のtimestamp型対応文字列に変換。
さらにさらにさらに
TIMESTAMP("timestamp型対応文字列","Asia/Tokyo")
でtimestamp型に変換。
ああめんどくさかった……でもどうしてもこうしないといけない案件があったんだ……
この記事が気に入ったらサポートをしてみませんか?