SQL Server 2005에서 두 날짜 사이에 몇 달에 숫자를 얻는 방법
-
20-09-2019 - |
문제
SQL Server 2005 테이블에는 직원이 서비스중인 개월을 보유 해야하는 열이 있습니다.
직원이 참여한 날짜도 있기 때문에 "Month_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
Datediff 측정 월 경계 측정 예 : 매월 1 일의 기념일이 아닌 매월 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을 제공하여 1 = 0 개월을 빼냅니다.
다른 팁
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