문제

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)
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top