SQL Server 2005の2つの日付の間に数か月に数を取得する方法
-
20-09-2019 - |
質問
SQL Server 2005テーブルには、従業員が使用されている月数を保持する列があります。
従業員が従事していた日付もあるので、「months_in_service」列を計算済みの列にしたいです。
今私が使用する場合 DATEDIFF(month,[DateEngaged],GETDATE())
サービスコンピューター列の数ヶ月の式として、結果は時々正しいものであり、時には正しくありません。
デートエンゲージ値と現在の日付の間に月数を得るためのより良い信頼できる方法は何でしょうか?計算された列でどの式を使用する必要がありますか?
解決
のようなもの(1と0を交換する必要があるかもしれません、テストされていない)
datediff(month,[DateEngaged],getdate()) +
CASE WHEN DATEPART(day, [DateEngaged]) < DATEPART(day, getdate()) THEN 1 ELSE 0 END
毎日の月の境界例:毎月1日の00:00時間、月の記念日ではありません
編集:OPのコメントを見た後、開始日>終了日の場合は1を差し引く必要があります
DATEDIFF (month, DateEngaged, getdate()) -
CASE
WHEN DATEPART(day, DateEngaged) > DATEPART(day, getdate()) THEN 1 ELSE 0
END
したがって、12月20日から1月13日に、Datediffは1、その後20> 13を与えます。
他のヒント
GBNと同じアプローチですが、キーストロークが少ない:-)
SELECT
DATEDIFF(MONTH, DateEngaged, GETDATE()) +
CASE
WHEN DAY(DateEngaged) < DAY(GETDATE())
THEN 1
ELSE 0
END
多分あなたは次のようなものが欲しいです:
(year(getdate())-year([DateEngaged]))*12+(month(getdate())-month([DateEngaged]))
その月が30日間の意味であると推測する場合は、ヴェールを回ることもできます
round((datediff(day,[DateEngaged],getdate()))/30.00,0)
所属していません StackOverflow