我如何使用DATEDIFF返回年份,月份和天数中两个日期之间的差SQL Server 2005
DATEDIFF
SQL Server 2005
DATEDIFF (date , date)
结果如何:2年3个月10天
有人能完成t-sql吗?
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
这是我对Eric函数的解决方案:
DECLARE @getmm INT DECLARE @getdd 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)) SET @getdd = ABS(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, @yy, @dstart), @dend), DATEADD(yy, @yy, @dstart)), @dend)) RETURN ( Convert(varchar(10),@yy) + 'year' + Convert(varchar(10),@getmm) + 'month' + Convert(varchar(10),@getdd) + 'day' )
如果开始日期晚于结束日期,请使用ABS进行处理。
这:
WITH ex_table AS ( SELECT '2007-01-01' 'birthdatetime', '2009-03-29' 'visitdatetime') SELECT CAST(DATEDIFF(yy, t.birthdatetime, t.visitdatetime) AS varchar(4)) +' year '+ CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, t.birthdatetime, t.visitdatetime), t.birthdatetime), t.visitdatetime) AS varchar(2)) +' month '+ CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, t.birthdatetime, t.visitdatetime), t.birthdatetime), t.visitdatetime), DATEADD(yy, DATEDIFF(yy, t.birthdatetime, t.visitdatetime), t.birthdatetime)), t.visitdatetime) AS varchar(2)) +' day' AS result FROM ex_table t
..或非CTE用于SQL Server 2000及更低版本:
SELECT CAST(DATEDIFF(yy, t.birthdatetime, t.visitdatetime) AS varchar(4)) +' year '+ CAST(DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, t.birthdatetime, t.visitdatetime), t.birthdatetime), t.visitdatetime) AS varchar(2)) +' month '+ CAST(DATEDIFF(dd, DATEADD(mm, DATEDIFF(mm, DATEADD(yy, DATEDIFF(yy, t.birthdatetime, t.visitdatetime), t.birthdatetime), t.visitdatetime), DATEADD(yy, DATEDIFF(yy, t.birthdatetime, t.visitdatetime), t.birthdatetime)), t.visitdatetime) AS varchar(2)) +' day' AS result FROM (SELECT '2007-01-01' 'birthdatetime', '2009-03-29' 'visitdatetime') t
…将返回:
result ---------------------- 2 year 2 month 28 day