[小ネタ] BigQueryで区切り文字のない年月日(YYYYMMDD)から日付型(YYYY-MM-DD)にする方法

2021.03.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Snowflakeで区切り文字のない年月日(YYYYMMDD)から日付型(YYYY-MM-DD)にする方法を書いて、BigQueryでは、こういう場合、どのようにして変換するのかが気になったので調べました。

BigQueryの公式ドキュメントの日付に関するページをみたところ、PARSE_DATEという文字列の日付をDATQueryE型にする関数がありました。

すると、なんと!!

そのままのケースが紹介されていました。(うう..企画倒れ...)

SELECT PARSE_DATE("%Y%m%d", "20081225") as parsed;

+------------+
| parsed     |
+------------+
| 2008-12-25 |
+------------+

でも、諦めません。そう数値で入っている場合にはどうするのか問題があります。

BigQueryでは型を変換する際にCAST関数を使用します。これで数値型の年月日(YYYYMMDD)を文字列に変換して上述のPARSE_DATE関数に入れてみました。

SELECT PARSE_DATE("%Y%m%d", CAST(20210319 AS STRING))

見事、日付型(YYYY-MM-DD)にすることができました。

おまけ

PARSE_DATEはPARSE_DATE(format_string, date_string)と2つ要素が必要なのですが、date_stringの形式に合わせてformat_stringを1つまたは複数組み合わせる必要があります。

format_stringも公式ドキュメントで紹介されています。