简单的问题:我需要检测两个日期之间的差异,这样当Date_1 = 12-jan-2010
和Date_2 = 01-jan-2016
时,我会不获得6但是数字< 6。
SELECT DATEDIFF(YEAR,'12-jan-2010','01-jan-2016')
在上述情况下,DATEDIFF返回6.
任何建议都将受到高度赞赏。
由于
答案 0 :(得分:0)
这取决于所需的精度,请尝试以下操作:
SELECT DATEDIFF(DAY, @d1, @d2)/365.25
答案 1 :(得分:0)
我想这会解决,
DECLARE @STARTDATE DATE='12-jan-2010'
DECLARE @ENDDATE DATE='01-jan-2016'
DECLARE @TOTALDAY DECIMAL(18,2)=DATEDIFF(day,@STARTDATE,@ENDDATE)
DECLARE @AVGYEAR DECIMAL(18,2)= ((365*DATEDIFF(YEAR,@STARTDATE,@ENDDATE))+
dbo.LEAP_YEAR(@STARTDATE,@ENDDATE))/CONVERT(DECIMAL(18,2),
DATEDIFF(YEAR,@STARTDATE,@ENDDATE))
SELECT CONVERT(decimal(18,2),@TOTALDAY/@AVGYEAR) AS DiffDate ---This will provide you result in decimal
这个日期之间没有闰年的函数。
ALTER FUNCTION LEAP_YEAR(@START DATE,@END DATE)
RETURNS INT
AS BEGIN
DECLARE @COUNT INT = 0,@Z INT = DATEPART(YYYY,@START)
DECLARE @X INT =DATEPART(YYYY,@START)
DECLARE @Y INT =DATEPART(YYYY,@END)
IF (DATEPART(MM,@START) >2)
SET @X=@X+1
IF (DATEPART(MM,@END) <2)
SET @Y=@Y-1
WHILE (@X <= @Y)
BEGIN
SET @COUNT = @COUNT +
(CASE WHEN (@X%4 = 0 AND @X%100 !=0) OR @X%400 = 0
THEN 1
ELSE 0 END)
SET @X = @X + 1
END
RETURN @COUNT
END
答案 2 :(得分:0)
如果我做对了。只需将DATEDIFF(在这种情况下为6
)的结果添加到开始日期(如果它&gt;结束日期然后减去1年,这样你将获得5年的全年:
DECLARE @StartD DATETIME;
DECLARE @FinalD DATETIME;
SET @StartD = '12-jan-2010';
SET @FinalD = '11-jan-2016';
SELECT DATEDIFF(YEAR,@StartD,@FinalD)
- CASE WHEN DATEADD(YEAR,DATEDIFF(YEAR,@StartD,@FinalD),@StartD)>@FinalD
THEN 1 ELSE 0 END
答案 3 :(得分:0)
首先,我要感谢那些花时间尝试提供简单可靠解决方案的人。最后,我决定按如下方式解决它:
假设我想知道两个日期之间是否过了@n
年,那么:
DECLARE @n INT ;
DECLARE @Old_Date DATETIME ;
DECLARE @New_Date DATETIME ;
SET @n = <some_value> ;
SET @Old_Date = <some_value> ;
SET @New_Date = <some_value> ;
IF (DATEADD(YEAR ,@n , @Old_Date) <= @New_Date)
SET @Result = 'YES' ;
ELSE
SET @Result = 'NO' ;
[当然,需要包含检查以验证@Old_Date&lt; @New_Date] 强>
我不能说在所有可能的场景中都可以证明(数学上)这是正确的,但它为我提供了所需的答案。
再次感谢所有人。