-2

MSSQLを使用して、以下に詳述するように日付間の日数を計算する必要があります

各月は 30 日あると見なす必要があります (そうでない場合でも)。

2013 年 1 月 2 日から 2013 年 3 月 2 日までの差は

(30-2) + 30 + 2 days  
where (30-2) will be for January  
      30 will be for February  
      2 will be for March 
4

2 に答える 2

1

SQL Server で Oracle の MONTHS_BETWEEN に似た結果を得たいようです。

これは Teradata で作成した SQL 関数です。おそらく EXTRACT を YEAR/MONTH/DAY(date) に変更する必要があります

REPLACE FUNCTION MONTHS_BETWEEN(date1 DATE, date2 DATE)
RETURNS FLOAT
SPECIFIC months_between_DT
RETURNS NULL ON NULL INPUT
CONTAINS SQL
DETERMINISTIC
COLLATION INVOKER
INLINE TYPE 1
RETURN 
   (EXTRACT(YEAR FROM date1) * 12 + EXTRACT(MONTH FROM date1))
 - (EXTRACT(YEAR FROM date2) * 12 + EXTRACT(MONTH FROM date2))
 + CASE
     WHEN EXTRACT(MONTH FROM date2) <> EXTRACT(MONTH FROM date2+1) AND
          EXTRACT(MONTH FROM date1) <> EXTRACT(MONTH FROM date1+1)
     THEN 0
     ELSE (CAST(1 AS FLOAT))/31 * (EXTRACT(DAY FROM date1) - EXTRACT(DAY FROM date2))
   END
;

次に、結果に * 30 を掛けて、INT にキャストします。

于 2013-09-16T19:57:22.893 に答える