我需要指出今天和雇员之间有多少天被雇用(但不关心这一年)。如果一名员工在2012年7月1日雇用,我希望得到一个结果是今天07/15 / 2013-07 / 1/2013,即15天。我不需要2012年的雇用年。
我玩dateadd和datediff但是没有得到正确的结果。
SELECT
Co Employee,
LastName,
FirstName,
dateadd(dd, DATEDIFF(dd,CURRENT_TIMESTAMP,0),HireDate)
FROM dbo.PREH
答案 0 :(得分:2)
您可以使用模数除法:
SELECT DATEDIFF(DAY,'20120101',GETDATE())%365
缺点是你对闰年的处理与每隔一年一样,你可以用案例逻辑处理。
在您的代码中:
SELECT
Co Employee,
LastName,
FirstName,
DATEDIFF(DAY,HireDate,GETDATE())%365 AS DaysThisYear
FROM dbo.PREH
答案 1 :(得分:1)
这可能是一种蛮力,但似乎有效。我们的想法是在招聘人员中添加若干年,然后根据当前日期进行检查。当它更大时,少用一年:
select (case when DATEADD(year, datediff(year, hiredate, getdate()), hiredate) < GETDATE()
then DATEDIFF(dd, DATEADD(year, datediff(year, hiredate, getdate()), hiredate), getdate())
else DATEDIFF(dd, DATEADD(year, datediff(year, hiredate, getdate()) - 1, hiredate), getdate())
end)
from preh;
问题在于datediff()
year
返回年边界的次数,而不是两个日期之间的年数作为跨度。因此,2012-12-30和2013-01-01之间有一年,2012-01-01和2013-12-31之间有一年。
答案 2 :(得分:0)
听起来你正在放弃这一年,只是作为格式化输出的一部分。但格式化不应影响基础数据。元组的最后一个元素应该是:
datediff(day, HireDate, getdate())
通过这种方式,您可以对数据进行算术运算,并在需要时保存下游格式。