【BigQuery】yyyymmdd形式のSTRING型日時データをDATE型に変換する方法

20230802_BigQuery クラウドプラットフォーム

前回STRING型の日付データをDATETIME型に変換する方法を紹介しました。
変換するには文字列操作するか、parse_datetime関数を使う必要がありましたね。

今回はSTRING型の日時データをDATE型に変換する方法をご紹介します。

テストデータ準備

yyyymmdd形式のSTRING型日付データを用意しました。
このデータをDATE型に変換しましょう。

もっと簡単な方法はparse_date関数を使うことです。
parse_date関数はこのように書きます。

PARSE_DATE('フォーマット要素', STRING型データ)

フォーマット要素について

フォーマット要素とは日時型(DATE, DATETIME, TIMESTAMP)に変換するときに使われる専用の書式です。BigQueryで用意されており詳しくはこちらをご確認ください。

Format elements  |  BigQuery  |  Google Cloud

parse_date関数を使う

公式リファレンスを見るとSTRING型の20230802はそれぞれ以下のフォーマット要素に対応することが分かりますね。それではクエリを実行してみましょう!

  • 2023 → %Y
  • 08 → %m
  • 02 → %d
SELECT
  parse_date('%Y%m%d', '20230802') AS DATE

STRING型からDATE型へ変換ができました。
parse_date関数を使うと余計な文字列操作が要らないためシンプルに書けますね。

補足 もしフォーマット要素が%Yだけだったら

フォーマット要素の%Y%m%dがもし%Yだけだったらどんな結果が帰ってくるのでしょうか?実際に確認してみましょう。

SELECT
  parse_date('%Y', '20230802') AS DATE

どうやらエラーが返ってくるようですね。
文字列をyyyyだけ残して再度クエリを実行してみます。

SELECT
  parse_date('%Y', '2023') AS DATE

2023年1月1日で返ってきました。
公式を見ると「The year with century as a decimal number.」とあるのでおそらく西暦(1桁〜4桁)に対応していればエラーは発生しないのでしょう

まとめ

yyyymmdd形式のSTRING型日時データをDATE型に変換するにはparse_date関数を使いました。またそれに加えてフォーマット要素についても紹介しました。

今回の記事で紹介しきれなかったフォーマット要素がまだまだあるので公式リファレンスを参考に自分でも使ってみてください!