SQL での日付間の満月の計算
SQL では、2 つの日付の差を計算するために DATEDIFF 関数がよく使用されます。ただし、この関数は、完全な月数ではなく、月単位の差を返します。 2 つの日付の間の完全な月数を決定するには、より具体的な計算が必要です。
UDF アプローチ
1 つのアプローチは、ユーザー定義関数 (UDF) を作成することです。 ) 2 つの日付の間の完全な月数を計算します。 FullMonthsSeparation という名前の関数は次のように記述されます。
CREATE FUNCTION FullMonthsSeparation ( @DateA DATETIME, @DateB DATETIME ) RETURNS INT AS BEGIN DECLARE @Result INT DECLARE @DateX DATETIME DECLARE @DateY DATETIME IF(@DateA < @DateB) BEGIN SET @DateX = @DateA SET @DateY = @DateB END ELSE BEGIN SET @DateX = @DateB SET @DateY = @DateA END SET @Result = ( SELECT CASE WHEN DATEPART(DAY, @DateX) > DATEPART(DAY, @DateY) THEN DATEDIFF(MONTH, @DateX, @DateY) - 1 ELSE DATEDIFF(MONTH, @DateX, @DateY) END ) RETURN @Result END
使用例
FullMonthsSeparation 関数を使用するには、2 つの日付をパラメーターとして指定して呼び出すだけです。例:
SELECT dbo.FullMonthsSeparation('2009-04-16', '2009-05-15') as MonthSep -- =0 SELECT dbo.FullMonthsSeparation('2009-04-16', '2009-05-16') as MonthSep -- =1 SELECT dbo.FullMonthsSeparation('2009-04-16', '2009-06-16') as MonthSep -- =2
この関数は、2 つの日付の間の完全な月数を返します。これは、開始日の日付が終了日よりも大きい可能性を考慮しており、その場合は結果から 1 か月が減算されます。
以上がSQL で 2 つの日付間の満月数を正確に計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。