- SQL Server 将日期转换为年数

  显示原文与译文双语对照的内容
56 0

我在一个问题上有一个问题,我需要改变日期到年份的数量:

创建一个查询,显示b 2014中左Auntie的员工。

在输出中显示人员标识。雇佣日期。日期日期和年份。

标题最后一个列 Years Employed

你的输出应该如下所示:

PeopleID HireDate TermDate Years Employed
 1016 2010-06-22 2014-01-15 4
 1029 2010-02-10 2014-02-05 4

这是我的代码:

select PeopleId, HireDate,TermDate
from WORKERS 
where TermDate like '%2014%'
 floor(datediff('2010-06-22','2014-01-15', TermDate)/365) as 'Years Employed'
时间:原作者:0个回答

117 5

datediff 需要 day 作为 1st 参数,如下所示:

select 
 PeopleId, 
 HireDate,
 TermDate,
 floor(datediff(day, HireDate, TermDate)/365) as [Years Employed]
from WORKERS 
where year(TermDate) = 2014
原作者:
148 5

使用 DATEDIFF():

SELECT W.*,
 DATEDIFF(YEAR, W.HireDate, W.TermDate)
FROM WORKERS W
WHERE TermDate> '2013-12-31' AND TermDate <'2015-01-01';
原作者:
99 5
select 
 PeopleId, 
 HireDate,
 TermDate,
 SUM(DATEDIFF(DAY,HireDate,TermDate ))/365.0 AS YEARS_EMPLOYEED
from WORKERS 
where year(TermDate) = 2014

下面是一个关于它如何工作的好教程:

https://www.w3schools.com/sql/func_sqlserver_datediff.asp

原作者:
127 1
这里的许多答案都告诉你仅仅使用 datediff,但这可以能不是你实际想要做的,因为 datediff的工作方式。

datediff 不计算给定开始时间和结束时间之间完整的或者甚至部分的周期数。计算周期边界交叉数。

这意味着,对于所有这些计算:

select datediff(year, '2018-12-31 23:59:59.997', '2019-01-01 00:00:00.000')
, datediff(month, '2018-12-31 23:59:59.997', '2019-01-01 00:00:00.000')
, datediff(day, '2018-12-31 23:59:59.997', '2019-01-01 00:00:00.000')
, datediff(hour, '2018-12-31 23:59:59.997', '2019-01-01 00:00:00.000')
, datediff(minute, '2018-12-31 23:59:59.997', '2019-01-01 00:00:00.000')
, datediff(second, '2018-12-31 23:59:59.997', '2019-01-01 00:00:00.000')

即使两个日期之间只有 3毫秒差,你也会返回值 1,如下所示:

select datediff(year, '2018-01-01 00:00:00.000', '2019-12-31 23:59:59.997')

也将返回 1,即使该周期小于 2年的3毫秒。

因这里,你需要选择一个较小的周期,并将它的划分为一年度粒度,以获得所需的值。个人来说,我使用的小时数在一个小时的平均年,这将考虑闰年的考虑。

根据给出的示例,你可以返回:

select datediff(hour, '2010-06-22', '2014-01-15')/8766 as WholeYears -- 3
, datediff(hour, '2010-06-22', '2014-01-15')/8766.0 as DecimalYears -- 3.567419

然而看起来不管是谁设定的赋值,在 2010年06月 和 2014年01月 之间的差异都是 4年,因为任何度量都不可能正确。

原作者:
...