Excel公式:=DATEDIF(I2,TODAY(), "Y")&" 年"&DATEDIF(I2,TODAY(), "Ym")&" 月"&DATEDIF(I2,TODAY(), "MD")&" 天"
格式为:2年9个月6天
想在SQL查询中得到这个。
有什么想法?
在TSQL中可以写成。
-- In case your date column has time also use Datetime for @I2 instead
DECLARE @I2 AS DATE
SET @I2 = '11/9/2014'
-- In TSQL GETDATE() returns current date and time
SELECT CAST (
DATEDIFF(YY,@I2,GETDATE())
- CASE WHEN (MONTH(@I2) > MONTH(GETDATE()))
OR (MONTH(@I2) = MONTH(GETDATE())
AND DAY(@I2) > DAY(GETDATE()))
THEN 1 ELSE 0 END
AS VARCHAR(4)
) +' Years ' +
CAST (
datediff(month, @I2, GETDATE())
- CASE WHEN DAY(@I2) > DAY(GETDATE())
THEN 1 ELSE 0 END
AS VARCHAR(4)
) +' Months ' +
CAST(
DATEDIFF(d,
DATEADD(m,
datediff(month, @I2, GETDATE())
- CASE WHEN DAY(@I2) > DAY(GETDATE())
THEN 1 ELSE 0 END
, @I2)
, GETDATE())
AS VARCHAR(4)
) +' Days '
EDIT: 看来excel也是这样做的,事实上。有毛病!
警告:Excel提供了DATEDIF函数,以支持Lotus 1-2-3的旧工作簿。Excel提供了DATEDIF函数,以支持Lotus 1-2-3的旧工作簿。在某些情况下,DATEDIF函数可能会计算出不正确的结果。请参阅本文的已知问题部分,了解更多细节。
就其价值而言,我不得不对我的函数进行了一些调整,以使其按预期工作。下面的工作99%的时间,但据我所知,可能会有1-3天的偏差。我跑了1500多个单元测试,只有15个在这个范围内失败。
例如,这个日期范围12311973-1252019就偏离了一天。要么就是excel出了个bug!
SELECT CAST (
DATEDIFF(YY,@I2,GetDate())
- CASE WHEN (MONTH(@I2) > MONTH(GetDate()))
OR (MONTH(@I2) = MONTH(GetDate())
AND DAY(@I2) > DAY(GetDate()))
THEN 1 ELSE 0 END
AS VARCHAR(4)
) + ' Years ' +
CAST (
datediff(month, @I2, GetDate())
- CASE WHEN DAY(@I2) > DAY(GetDate())
THEN 1 ELSE 0 END
-
(DATEDIFF(YY,@I2,GetDate())
- CASE WHEN (MONTH(@I2) > MONTH(GetDate()))
OR (MONTH(@I2) = MONTH(GetDate())
AND DAY(@I2) > DAY(GetDate()))
THEN 1 ELSE 0 END) * 12
AS VARCHAR(4)
) + ' Months ' +
CAST(
DATEDIFF(d,
DATEADD(m,
datediff(month, @I2, GetDate())
- CASE WHEN DAY(@I2) > DAY(GetDate())
THEN 1 ELSE 0 END
, @I2)
, GetDate())
AS VARCHAR(4)
) + ' Days '