Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何将DateDiff转换回datetime?_Sql Server - Fatal编程技术网

Sql server 如何将DateDiff转换回datetime?

Sql server 如何将DateDiff转换回datetime?,sql-server,Sql Server,datediff(秒,@date1,@date2) i、 e.2004-09-01 09:56:11.000和2005-02-02 08:54:02.000之间的精确差异…输出应该是5个月,x天,y小时,z分钟,m秒。你需要它作为小时和分钟吗?您可以使用日期添加到0日期: dateadd(second, amount, 0) 然后使用convert和格式选项(如108)将其转换为合适的格式 convert(varchar, dateadd(second, amount, 0), 108) d

datediff(秒,@date1,@date2)


i、 e.2004-09-01 09:56:11.000和2005-02-02 08:54:02.000之间的精确差异…输出应该是5个月,x天,y小时,z分钟,m秒。

你需要它作为小时和分钟吗?您可以使用日期添加到0日期:

dateadd(second, amount, 0)
然后使用convert和格式选项(如108)将其转换为合适的格式

convert(varchar, dateadd(second, amount, 0), 108)

datediff
有3个参数,而不是2个:
datediff(daypart、startdate、enddate)
。如果需要以秒为单位的差异,请使用
datediff(秒、@date1、@date2)


要将其转换回datetime,请使用
dateadd(datepart、number、startdate)
。例如,
dateadd(第二个,@diffResult,'1900-01-01')
。对于开始日期,选择一个适合您需要的日期。

这比我最初想象的要困难得多,计算月和日是复杂的。这是一个尝试。您应该仔细测试它,我想leapyear也可能会导致年份计算出现问题,因此我将其从答案中删除,因为它不是您问题的一部分:

DECLARE @date1 datetime = '2004-09-01 09:56:11.000',
        @date2 datetime = '2005-02-02 08:54:02.000'

SELECT 
  @date2 - @date1 difference,
  datediff(month, @date1, @date2) + 
    CASE WHEN dateadd(month, datediff(month, @date1, @date2), @date1)>@date2 
    THEN -1
    ELSE 0 END month, 
  day(@date2 - dateadd(month, datediff(month, @date1, @date2) 
    + CASE WHEN dateadd(month, datediff(month, @date1, @date2), @date1)>@date2
      THEN -1 ELSE 0 
      END, @date1)) - 1 day,
  datepart(hour,@date2 - @date1) hour,
  datepart(minute,@date2 - @date1) minute,
  datepart(second,@date2 - @date1) second
现在的结果是:

difference                month  day  hour  minute  second
1900-06-03 22:57:51.000       5    0    22      57      51
注意:这个答案不会给出完全相同的结果,但将秒数向下舍入会更准确

更多编辑:

如果您可以接受没有评论中所述的月份,并且可以接受x天hh:MM:ss格式。您可以使用以下语法:

SELECT 
  CAST((DateDiff(SECOND, @date1, @date2)) / 86400 AS varchar(7)) + ' days ' 
  + CAST(cast(@date2 - @date1 as time(0)) as char(8)) 

如何将秒与
datetime
数据类型关联?是万年吗?这有意义吗?您可以使用
dateadd
btw来完成。我想知道2004-09-01 09:56:11.000和2005-02-02 08:54:02.000之间的确切差异…输出应该是5个月,x天,y小时,z分钟,m秒。我可以做时分和秒。。但是对于这个问题,我也想要年、月、日。是的,这只适用于较小的时间单位,我假设在以秒为单位测量时是这样的,因为当时的问题没有提到天或月。2004-09-01 09:56:11.000和2005-02-02 08:54:02.000…我想要结果是5个月,x天,y小时,z分钟,米秒。@ParulSingla我已更正了查询,但未更正结果。这两个都更新了,现在要重写计算,就像其他答案一样,它不会100%精确到monthsI我很抱歉我计算错了差值。实际时间差为153天22小时57分51秒。或5个月22小时57分51秒。它显示2天。“但它应该是0。”我可以相信,帕鲁辛格拉,和月份一样,减去月份后,剩下的日子就剩下了。制定解决方案