当前位置: 首页 > 面试题库 >

如何使用DATEDIFF返回年,月和日?

林蕴藉
2023-03-14
问题内容

我如何使用DATEDIFF返回年份,月份和天数中两个日期之间的差SQL Server 2005

DATEDIFF (date , date)

结果如何: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

问题答案:

这是我对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


 类似资料:
  • 问题内容: 我正在尝试使用以下格式为每个人打印其年龄: 例如:19年8个月13天。 我已经在Google上搜索了很多,并且注意到有一个特定的函数可以计算日期之间的差。 但是,该功能在中不存在,因此我继续尝试使用和一些运算符。 我的尝试: 我的问题取决于日子。我不知道如何使用此函数计算天数(“尝试除以4或30”);我以为我的逻辑不好,但我无法弄清楚,有什么想法吗? 问题答案: 与Lalit的答案非常

  • 问题内容: 有几个月使用的好方法吗?需要说明的是:该方法有两列,并返回两个日期之间经过的 天 数。我想在 几个月内得到 。我想在我的函数中有一个参数,可以告诉我检查过去20个月,36个月(无论几个月)中的数据。如果我只是做datediff并将结果除以30(或31),则结果不是很准确。我可以使用30.4166667(= 365天/ 12个月),但这在较短的时间内也不是很准确。那么,有关如何使用它的任

  • 问题内容: 我正在尝试转换这样的时间戳: 自格式以来的某个时间,因此它会像9个月前1天2小时30分钟2秒。 这样的东西。 我用过并达到以下目的: 但是我该如何转换呢?我是这样想的: 但这是一个问题,因为几个月可能会有28、30和31天,所以几个月不会准确。 有没有实现我想要的更好的方法? 问题答案: 前言: 我在中发布了此实用程序,请参见。 就像一年中的日子(le年)一样,一个月中的日子取决于日期

  • 问题内容: 我不知道如何用代码返回JSON数据。 JS C#的Default.aspx.cs 提前致谢! 问题答案: 你不远 您需要执行以下操作: 您可以进一步减少此代码,但为清晰起见,我将其保留下来。实际上,您甚至可以这样写: 这将返回一个json字符串。我宁愿更加明确,因为我使用自定义转换器。也有Json.net,但是框架的工作开箱即可。

  • 我是JS的初学者。我可以用下面的代码计算年龄。这段代码多年来一直运行良好。如果我把日期放在任何一个月的12(例如,1950年12月14日)之后,那么它显示的是年份。现在我想展示每个人生日的年、月、日。有人能帮我吗?提前谢谢。

  • 我如何循环年和月来显示下面的输出?显示期间的限制也是当月和年度,显示3年,包括截至日期的年度。意思是如果现在是2019年,那就展示2018年和2017年。 2019 1 201 9 2 201 9 3 201 9 4 201 9 5 201 9 6