DB

BigQueryでdate型のカラムをbetween等で比較する方法

BigQueryでdate型のカラムをbetween等で比較する方法

date型のカラムに対してbetween等の比較演算子を使って範囲を絞りたい。

データベース(DB)に日付データを格納していたら出てきそうな要望である。

GoogleのBigQuery(通称「BQ」)はデータ分析によく使われるが、同じように日付のフィルタをかけたい場合があるだろう。

しかしここで問題が出てくる。
date型はDBによって扱い方が異なる。

同じ事をしたくてもSQLの書き方がDB毎に違うのだ。

なので今回は「BigQueryでdate型のカラムをbetween等で比較する方法」を解説する。

この記事を書いている人


からさん
システムエンジニア、AIエンジニアと、IT業界で10年以上働いている中堅。PythonとSQLが得意。最近GCP環境を習得中。

記事を読むメリット

  • BigQueryでdate型のカラムをbetween等で比較する方法がわかる

  • BigQueryでdate型のカラムをbetween等で比較する方法

    BigQueryでdate型のカラムをbetween等で比較する方法

    BigQueryでdate型のカラムをbetween等で比較する方法は簡単だ。

    そのまま日付の文字列と比較すればいい。

    select * from dataset_name.table_name
    where date_column between "2020-09-01" and "2020-10-01"
    



    以前はDATE関数を使う必要があった?

    以前はdate型と文字列の比較はエラーになっていて、DATE関数で変換する必要があったという記述もある。

    NGパターン

    SELECT * FROM dataset.table_name WHERE Date = "2016-07-11"
    Argument type mismatch in function EQUAL:
    'Date' is type int32, '2016-07-11' is type string
    


    OKパターン

    SELECT * FROM dataset.table_name  WHERE DATE(Date) = "2016-07-11"
    


    ただベストアンサーを見ると、エラー原因は「予約語をカラム名に使用しているから」とされており、予約語を使っていなければDATEでの変換も不要とのこと。



    他のDBでは

    BQではdate型は文字列で比較できたが、他のDBではどうだろうか。

    MySQLは以前書いたように文字列の方が相性良いんだよね
    からさん
    少年
    なんだ。じゃあ簡単じゃん
    BQやMySQLは簡単に済んだけど、他のDBだと面倒だったりするんですよ
    からさん



    では別のDBではどうなのだろうか。

    Oracleだと「to_date関数を使え」って書いてあるし
    からさん
    select sysdate from dual
    where sysdate between to_date('2020-09-01', 'yyyy-mm-dd') and to_date('2020-10-11', 'yyyy-mm-dd')
    
    oracle sql developer


    少年
    ほんとだ、to_date関数使ってるね
    少年
    でも文字列でもいけるんじゃないの?
    ははっ、そんなまさか・・・
    からさん
    select sysdate from dual
    where sysdate between '2020-09-01' and '2020-10-11'
    
    oracle sql developer
    ・・・
    からさん
    ・・・
    からさん
    文字列との比較、いけちゃってるなぁ
    からさん
    少年
    全部文字列比較でいいんじゃん!
    いつの間にか便利になっている・・・
    からさん



    BigQueryでdate型のカラムをbetween等で比較する方法 まとめ

    BigQueryでdate型のカラムをbetween等で比較する方法は、"2020-10-05"のような日付フォーマットの文字列と比較すればよい

    MySQLも同様だが、Oracleもシングルクオートを使って'2020-10-05'のような文字列と比較できる。

    結論としては、全部日付フォーマットの文字列との比較でよかった



    他にもgsutilのエラーや、スプレッドシートなどのGSuiteのサービスでデータが更新できない場合の記事などがあるので、気になったら見て欲しい。

    コチラもオススメ

    KRSW

    駆け出し機械学習エンジニア。機械学習、DB、WEBと浅く広い感じ。 Junior machine learning engineer. Not a specialist but a generalist who knows DB, WEB too.

    役に立ったらシェアしてくれると励みになります。

    にほんブログ村 IT技術ブログへ

    -DB
    -, ,

    Translate »

    Copyright© ITips , 2020 All Rights Reserved.