sql >> データベース >  >> RDS >> PostgreSQL

mySQLでのPostgreSQLのdate_trunc

    抽出関数は便利なようで、私が見つけた日付関数は私の問題のいくつかを解決しますが、PostgreSQLのdate_truncを複製する方法はありますか?

    確かに、EXTRACT この特定のケースに最も近いものになるようです。

    PGの元のコード:

    WHERE date_trunc('month', QUERY_DATE) BETWEEN 
        date_trunc('month', now()) - INTERVAL '4 MONTH' AND 
        date_trunc('month', now() - INTERVAL '1 WEEK')
    

    EXTRACTを使用する :

    WHERE EXTRACT(YEAR_MONTH FROM QUERY_DATE)
          BETWEEN
              EXTRACT(YEAR_MONTH FROM NOW() - INTERVAL 4 MONTH)
          AND
              EXTRACT(YEAR_MONTH FROM NOW() - INTERVAL 1 WEEK)
    

    機能的には同じである必要がありますが、これは実際には、比較を行う前に日付をYYYYMM文字列にマングリングしています。

    別のオプションは、DATE_FORMATを使用することです。 日付文字列を再構築して月の初めに強制するには:

    WHERE DATE_FORMAT(QUERY_DATE, '%Y-%m-01')
          BETWEEN
              DATE_FORMAT(NOW() - INTERVAL 4 MONTH, '%Y-%m-01')
          AND
              DATE_FORMAT(NOW() - INTERVAL 1 WEEK, '%Y-%m-01')
    

    また、フィールドにインデックスが付けられている場合でも、MySQLは日付範囲の処理が非常に貧弱であることに注意してください。注意しないと、おそらく全表スキャンになってしまうでしょう。



    1. ユーザーの操作なしでコマンドラインからOracleクライアントをインストールします

    2. 複数の列の集計を含むSQLServerピボットテーブル

    3. MySQLでパーティションをランク付けする方法

    4. ORD()の例– MySQL