我知道Progress 4GL版本10以后配备了一个非常聪明的集成功能,称为“INTERVAL'它返回两个DATE,DATETIME或DATETIME-TZ值之间的时间间隔。 如果使用以下语法,
> DISPLAY INTERVAL(05/06/2014, 05/05/2015, "years").
会给你零,因为它被计为一年的短暂一天。
但是在SQL中,可以使用closet函数与DATEDIFF相关,你将无法获得相同的结果。在SQL Server中,以下查询
PRINT DATEDIFF(YEAR, '05/06/2014', '05/05/2015');
仍会打印一个而不是零,忽略它仍然有一天短暂被计为一年的位。 因此我的问题是SQL中是否有一个集成函数可用于实现与Progress 4GL相同的结果?
答案 0 :(得分:0)
DATEDIFF返回两个日期之间交叉的指定边界数。这种情况很好用了几天,但几个月和几年都不太有用,
以下是计算T-SQL中年份差异的一种方法,如在常见年龄计算中。它不是很强大,但完成工作。核心问题是SQL Server没有间隔数据类型。
--using YYYY-MM-DD date format literal to avoid ambiguity
DECLARE @date1 date = '2014-05-06', @date2 date = '2015-05-05';
--years between 2 dates
SELECT (CAST(CONVERT(char(8), @date2, 112) AS int) - CAST(CONVERT(char(8), @date1, 112) AS int)) / 10000;
答案 1 :(得分:0)
通常,对于这类问题,您可以以更精细的粒度计算数字,然后将其解析为更粗略的数字。在这种情况下,您可以计算两个日期之间的天数,然后除以365并将结果置于最低点。
DECLARE @date1 date = '2014-05-06', @date2 date = '2015-05-05';
SELECT FLOOR(DATEDIFF(DAY, @date1, @date2)/365.0)
当然,闰年会带来一些挑战。但是有一般的想法。