DATETIME型の日時データの差を取るときはDATETIME_DIFF関数を使います。
DATETIME_DIFF関数はいくつか表示形式を設定でき種類によって使い方が変わります。
今回はDATETIME_DIFF関数の使い方とその注意点をご紹介します。
DATETIME_DIFF関数の基本形
DATETIME関数はこのように書きます。
DATETIME_DIFF(DATETIME型の日時データ, DATETIME型日時データ, 出力形式)
使用できる出力形式はこちらをご確認ください。
Datetime functions | BigQuery | Google Cloud
業務であれば「DAY」などがよく使われると思いました。
ここからは具体的な日時データを使って差分を求めていきます。
DATETIME_DIFF関数を使い差分を表示する
DATETIME_DIFF関数を使うときに気をつけたいポイントをまとめました。
1. 第2引数が第1引数よりも遅い時間だとマイナスが付く
SELECT
DATETIME_DIFF('2023-04-02T09:00:00', '2023-04-03T09:00:00', DAY) AS `結果1`,
DATETIME_DIFF('2023-04-02T09:00:00', '2023-04-01T09:00:00', DAY) AS `結果2`
結果1は数値が「マイナス(-)」で結果2は「プラス(+)」となりました。
ここでのポイントは第2引数が第1引数よりも遅い時間だとマイナス(-)が付くことです。
DATETIME_DIFF関数を使うときは基本的に第1引数のほうが遅い時間になるようにしましょう。
2. 「DAY」をカウントする基準は日付変更線を超えたかどうか
SELECT
DATETIME_DIFF('2023-04-01T21:00:00', '2023-04-01T09:00:00', DAY) AS `結果1`,
DATETIME_DIFF('2023-04-02T21:00:00', '2023-04-01T09:00:00', DAY) AS `結果2`
結果1は「0」ですが、結果2は「1」となりました。
日付変更線を超えて初めて数えられるんですね。
3. 「WEEK」をカウントする基準は日曜日になったかどうか
SELECT
DATETIME_DIFF('2023-07-22T09:00:00', '2023-07-21T09:00:00', WEEK) AS `結果1_WEEK`, -- 2023年7月21日は金曜日、2023年7月22日は土曜日
DATETIME_DIFF('2023-07-23T09:00:00', '2023-07-22T09:00:00', WEEK) AS `結果2_WEEK`, -- 2023年7月23日は日曜日
DATETIME_DIFF('2023-07-22T09:00:00', '2023-07-21T09:00:00', DAY) AS `結果3_DAY`,
DATETIME_DIFF('2023-07-23T09:00:00', '2023-07-22T09:00:00', DAY) AS `結果4_DAY`
結果1は金曜日と土曜日で差分を取り、結果2は土曜日と日曜日で差分を取りました。
どちらも表示形式を「WEEK」にしたにも関わらず、結果1は「0」で結果2は「1」でした。
これは「WEEK」のカウント基準が日曜日のためです。
土曜日から日曜日になったときに数えるようですね。
まとめ
DATETIME_DIFF関数はDATETIME型同士で差分を求めるときに使いました。
DATETIME型はよく使うのでDATETIME_DIFF関数を使う機会も多いかもしれません。
- 第1引数が第2引数よりも遅い時間になるように引数を設定する
- 表示形式をDAYしたときは日付変更線を超えているか確認する
- 表示形式をWEEKとしたときは日曜日になったかどうかを確認する
これらに気をつけてDATETIME_DIFF関数を使いこなしましょう。
また公式ページでは「YEAR」の使い方のポイントを説明していたので気になった方は是非ご確認ください!
Datetime functions | BigQuery | Google Cloud