직원이 회사에서 근무한 시간을 알아 내려고하고 있으며, 사임 날짜가 있습니다.varchar 값 '2 년 -2 개월 21 일'을 데이터 유형 int로 변환 할 때 변환이 실패했습니다.
하지만 지금은 데이터가 없습니다. 따라서 데이터베이스의이 열의 값이 Null입니다. 하지만 내 SQL에서 일이 일어 났을 때 고려 사임 날짜 대신 현재 시간 그러나 지금은 작업 시작 날짜와 현재 시간을 가져 가라. 내 이론은 열 사퇴 날짜가 null 인 경우 "현재 날짜 - 작업 시작 날짜"를 사용하고 그렇지 않으면 사임 날짜 - 작업 시작 날짜가되어야합니다.
나는이 이론에 대한 SQL 쿼리를 작성하고 그것을 잘 작동하지만거야 나는이 문제가있어 시간을 직원 작업을위한 전 년 월 일에 대한 보답을하려고 할 때 : 이이) 나는이 오류의 고생을 시간 나는 또한 나는 그것의 변환해야하지만 그것이 내가 내 주요 쿼리를 실행할 때,이 오류가 너무 잘 작동하지 않는 생각, 그 라인을 변환하려고 :
> Msg 245, Level 16, State 1, Line 1
> Conversion failed when converting the varchar value '2 year -2 month 21 day' to data type int.
내 주요 질의는 다음과 같습니다
를**--- sql for how long employees work with year month day ----**
CASE
WHEN Users.ResignationDate IS NOT NULL
THEN DATEDIFF(YEAR, WorkStartDate, ResignationDate)
ELSE CAST(DATEDIFF(yy, WorkStartDate, GETDATE()) AS varchar(4)) + ' year ' +
CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate), GETDATE()) AS varchar(2)) + ' month ' +
CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate), GETDATE()), DATEADD(yy, DATEDIFF(yy, WorkStartDate, GETDATE()), WorkStartDate)), GETDATE()) AS varchar(2)) +' day' END as Ancinitet,
Paychecks.DepartmentName AS Afdelinger
FROM dbo.Paychecks INNER JOIN dbo.Users ON Users.Id=Paychecks.UserId
WHERE Users.CustomerId=214 order by Users.FirstName;
나는 문제를 분리하는 쿼리를 단순화 제안했다. –
나는 방금 쿼리를 편집했습니다. 제발 알 수 없다면 말해주세요. – RyaN
왜 사안에 대해 다른 결과를 보여주고 있습니까? - 사퇴 날짜가 null이 아니고 datediff를 사용할 때, 월 및 일 출력. –