yuji0602’s blog

日々思っていることなど。

BigQueryで月初と月末の日付を出す

概要

BigQueryで月初や月末日付を取りたい場合があると思うのですが、検索すると標準SQLの情報があまり見つからなかったので何とか自力で作成してみました。いつものように個人的なメモを残します。

月初

月初についてです。今は2018年5月なので2018/05/01が表示されるクエリとなります。

TIMESTAMPから表示するやり方は以下のようになりました。

SELECT FORMAT_DATE('%Y/%m/%d', DATE(TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), MONTH), "Asia/Tokyo"));

また、日付から表示するやり方は以下のようになりました。こちらの方がわかりやすいですかね。

SELECT FORMAT_DATE('%Y/%m/%d', DATE_TRUNC(CURRENT_DATE("Asia/Tokyo"), MONTH));

月末

次は月末についてです。先程の月初で取得した値に対してDATE_ADDで1ヶ月追加して、さらにDATE_ADDで1日引いた値となります。

こちらも先程の内容と同様にTIMESTAMPを利用したやり方です。

SELECT FORMAT_DATE('%Y/%m/%d',  DATE_ADD(DATE_ADD(DATE(TIMESTAMP_TRUNC(CURRENT_TIMESTAMP(), MONTH), "Asia/Tokyo") , INTERVAL 1 MONTH), INTERVAL -1 DAY))

こちらは日付を利用したやり方です。

SELECT FORMAT_DATE('%Y/%m/%d',  DATE_ADD(DATE_ADD(DATE_TRUNC(CURRENT_DATE("Asia/Tokyo"), MONTH), INTERVAL 1 MONTH), INTERVAL -1 DAY));

まとめ

何となく遠回りをしているような気がするのですが、こんな感じで表示することができたので、あとはFORMAT_DATEで値を整形して具合良く利用できるのではないかと思いました。