我想了解员工为公司工作了多长时间,我还应该了解是否有员工有一个辞职日期。将varchar值'2 year -2 month 21 day'转换为数据类型int时的转换失败
但是我现在没有这个数据,因此我的数据库中该列的值为空。但我认为在我的SQL发生时,采取辞职日期,而不是当前时间但现在采取工作开始日期和当前时间。我的理论是,如果列辞职日期为空,采取“当前日期 - 工作开始日期”,否则 它应该采取辞职日期 - 工作开始日期。
我写了一个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
为什么你在两种情况下显示不同的结果 - 当辞职日期不为空时,你使用的是datediff,当为空时,月和日的输出。 –