如何使用DATEDIFF返回SQL Server 2005中的年,月和日两个日期之间的差异
DATEDIFF(日期,日期)
如何结果:2年3个月10天
谁能完成这个t-sql?
ALTER FUNCTION [dbo].[gatYMD](@dstart VARCHAR(50), @dend VARCHAR(50))
RETURNS VARCHAR(50) AS
BEGIN
DECLARE @yy INT
DECLARE @mm INT
DECLARE @getmm INT
DECLARE @dd INT
SET @yy = DATEDIFF(yy, @dstart, @dend)
SET @mm = DATEDIFF(mm, @dstart, @dend)
SET @dd = DATEDIFF(dd, @dstart, @dend)
SET @getmm = ABS(DATEDIFF(mm, DATEADD(yy, @yy, @dstart), @dend))
RETURN (
Convert(varchar(10),@yy) + 'year' + Convert(varchar(10),@mm) + 'month' + Convert(varchar(10),@dd) + 'day'
)
END
8 回答
这是我对Eric功能的解决方案:
如果开始日期在结束日期之后,请使用ABS来处理 .
这个:
..或非CTE用于SQL Server 2000和之前:
...将返回:
参考:DATEDIFF
它适用于某些情况但是当你从2011-01-13(dateterminated)减去2007-10-15(DateHired)等日期时,它会给你一个负数,当abs不在它周围而是把abs放在一边不会修复它,因为那么年和月的数字是不正确的 .
修改后的功能
查看此页面... http://www.sqlteam.com/article/datediff-function-demystified
创建此功能:
和
最后
巨星!
Create this function, it will give exact date difference like year months days
我知道这里已经有了一些答案,但我想我会添加我想出的内容(至少对我来说),这似乎很简单:
然后当你打电话:
你会得到这个回复:
显然你可以将它更改为格式化输出并改为使用标量变量,但我会留给你:-)
编辑:
我最后还需要做一段时间的功能来返回像“5年和2天前”这样的格式
这是两个例子
和
我希望这对未来的某个人有用,因为我在搜索时找不到这样的东西(虽然可能是那些日子之一)但我愿意改进,因为我知道我并不总是最紧凑或最快的代码程序员:-)
问候
利亚姆
和
结果: