首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DATEDIFF (月)

DATEDIFF (月)
EN

Stack Overflow用户
提问于 2017-02-24 11:39:20
回答 1查看 397关注 0票数 0

我对DateDiff有一个问题(两个日期之间的月数)

当我尝试这个:

代码语言:javascript
复制
 SELECT
(CASE
WHEN X IS NOT NULL THEN

CONVERT(varchar(4), DATEDIFF(YEAR, Y, C)) + ' years '

ELSE
CONVERT(varchar(4), DATEDIFF(YEAR, A, GETDATE())) + ' years '+
CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy,GETDATE(),b), S), GETDATE()) AS varchar(4)) +' month '+
CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, c, GETDATE()), e), GETDATE()), DATEADD(yy, DATEDIFF(yy, f, GETDATE()), g)), GETDATE()) AS varchar(2)) +' day' end)  as result

FROM g INNER JOIN k ON M=U
WHERE T=XX order by Y;

结果如下:2年342个月2天

但它应该是这样的:2年3个月2天前。

有人能帮我指出正确的方向吗。谢谢。

正确答案:

代码语言:javascript
复制
CONVERT(varchar(4), DATEDIFF(dd, x, GETDATE())/365) + ' år '+

CONVERT(varchar(4), DATEDIFF(MONTH, x, GETDATE()) % 12) + ' måneder '+

CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, x, GETDATE()), x), GETDATE()), 
DATEADD(yy, DATEDIFF(yy, x, GETDATE()), x)), GETDATE()) AS varchar(2)) +' dag ' end) as Y,
EN

回答 1

Stack Overflow用户

发布于 2017-02-24 12:05:47

你需要做些额外的计算。看看这个

代码语言:javascript
复制
declare @AsOnDate datetime
declare @mdob datetime
set @AsOnDate = GETDATE() 
set @mdob = '2014-12-22' 
Select 
"Years" = CASE 
WHEN (DATEPART( DAY , @mdob)) > (DATEPART( DAY , @AsOnDate))
and (DATEPART( Month,@mdob)) = (DATEPART(Month, @AsOnDate))
THEN ((datediff(month,@mdob,@AsOnDate)-1)/12) 
ELSE (datediff(month,@mdob,@AsOnDate)/12) 
END,
"Months" = CASE 
WHEN (DATEPART( DAY , @mdob)) > (DATEPART( DAY , @AsOnDate)) 
and (DATEPART( Month,@mdob)) = (DATEPART( Month,@AsOnDate)) 
THEN ((datediff(month,@mdob,@AsOnDate)-1)% 12) 
ELSE (datediff(month,@mdob,@AsOnDate)% 12) 
END 

从这里获取的解决方案: https://www.sqlservercentral.com/Forums/Dialogs/PostDetails.aspx?PostID=1423756

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42437713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档