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

MySQLで月の2つの日付の差を計算する方法

    TIMESTAMPDIFF() MySQLで機能します。

    これにより、2つのTIMESTAMPを渡すことができます。 またはDATETIME 値(またはDATE MySQLが自動変換するため)、および差の基礎となる時間の単位。

    MONTHを指定できます 最初のパラメータの単位として:

    SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-04')
    -- 0
    
    SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-05')
    -- 1
    
    SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-06-15')
    -- 1
    
    SELECT TIMESTAMPDIFF(MONTH, '2012-05-05', '2012-12-16')
    -- 7
    

    基本的に、パラメータリストの最初の日付から経過した月数を取得します。このソリューションは、うるう年だけでなく、毎月のさまざまな日数(28、30、31)を考慮します。

    経過した月数の小数精度が必要な場合は、もう少し複雑ですが、その方法は次のとおりです。

    SELECT 
      TIMESTAMPDIFF(MONTH, startdate, enddate) +
      DATEDIFF(
        enddate,
        startdate + INTERVAL
          TIMESTAMPDIFF(MONTH, startdate, enddate)
        MONTH
      ) /
      DATEDIFF(
        startdate + INTERVAL
          TIMESTAMPDIFF(MONTH, startdate, enddate) + 1
        MONTH,
        startdate + INTERVAL
          TIMESTAMPDIFF(MONTH, startdate, enddate)
        MONTH
      )
    

    startdate およびenddate テーブル内の2つの日付列からのものか、スクリプトからの入力パラメーターとしてかを問わず、日付パラメーターは次のとおりです。

    例:

    With startdate = '2012-05-05' AND enddate = '2012-05-27':
    -- Outputs: 0.7097
    
    With startdate = '2012-05-05' AND enddate = '2012-06-13':
    -- Outputs: 1.2667
    
    With startdate = '2012-02-27' AND enddate = '2012-06-02':
    -- Outputs: 3.1935
    


    1. MySQLデータベースを新しいサーバーに移動します

    2. MySQLは現在のストリークの連続した日付をカウントします

    3. DRBDを使用したPostgreSQLのボリュームレベルレプリケーションの概要

    4. MariaDBでのPERIOD_DIFF()のしくみ