【发布时间】:2023-03-08 17:19:01
【问题描述】:
我需要在两个日期之间得到以下结果:
date_start = 01/01/2010
date_end = 2012 年 10 月 21 日
结果:1 年 9 个月零 20 天。
我尝试了下面的代码,但它不起作用。它有时会返回负日期:
SELECT CAST(DATEDIFF(yy, date_start, date_end) AS varchar(4)) +' year '+
CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy,date_start , date_end), date_start), date_end) AS varchar(2)) +' month '+
CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, date_start, date_end), date_start), date_end), DATEADD(yy, DATEDIFF(yy, date_start, date_end), date_start)), date_end) AS varchar(2)) +' day' AS result
谢谢!
【问题讨论】:
-
你确定预期结果是 1 年 9 个月还是 2 年 9 个月
-
如果开始日期是
2010-01-19或2010-01-21,你想要什么? -
无论您如何获得结果,请小心处理输出。请记住,一个月不是一个精确的时间单位。如果您的用户知道其中一点,例如“三个月后”或“三个月前”,那很好。但是没有参考点,“月”是没有意义的。
标签: sql-server datetime datediff sql-date-functions