如何从 SQL 中的日期时间列中减去时间列?

How to subtract Time Column from DateTime Column in SQL?

我有 Crea_Date 列,这是一个 DateTime 列。我想从 crea_date 列中减去 IST 列中的值,并 return 一个包含 DateTime 值的新列。我的样本数据是这样的:

States  crea_date               IST
AB      2014-12-30 15:01:00.000 12:30:00.0000000
AK      2014-12-29 16:32:00.000 10:30:00.0000000
AZ      2014-12-18 16:07:00.000 11:30:00.0000000

提前致谢

如果IST是秒的整数:

SELECT DATEADD(s, -IST, crea_date)
FROM yourTable

如果IST属于TIME类型:

SELECT DATEADD(ms, DATEDIFF(ms, IST, '00:00:00'), crea_date)
FROM yourTable

如果 IST 是基于字符的列,请尝试以下操作。

SELECT  
Crea_Date, IST,
dateadd(hh,cast(substring(IST,1,2) as int),  
    dateadd(mi, cast(substring(IST, 4,2) as int), 
             dateadd(s, cast(substring(IST,7,2 ) as int), crea_date)
             )) Final_Date
from [Yourtable]

您将在 Final_Date 列中获得添加日期。

对@0xF 的回答稍作修改,我找到了最终的解决方案:

convert(varchar(10),
DATEADD(ms, DATEDIFF(ms, '00:00:00', IST), crea_date), 101) + right(convert(varchar(32
DATEADD(ms, DATEDIFF(ms, '00:00:00', IST), crea_date),100),8)

虽然看起来很奇怪,但您 可以 add/subtract datetime 值,这似乎是 "normal" 行为。

在内部,日期时间值存储为 1/1/1900 的偏移量。如果我添加 22/1/20151/1/2015 我得到 22/1/2130 因为第二个值实际上是 1900.

之后的 115

当您将 time 值转换为 datetime 时,仅复制时间部分并将日期部分设置为 1/1/1900。实际上,您的时间间隔等于您的原始时间值。

这样我可以从特定日期时间减去 10:30 小时:

declare @d datetime='2014-11-04 12:51:00', @t time='10:30:00'
select @d -cast(@t as datetime)

//-----------------------
//2014-11-04 02:21:00.000

此行为不是实现上的怪癖 - 仅对 datetime 类型明确允许。所有其他日期时间类型(例如 datetime2、datetimeoffset)return 错误 Operand data type datetimeoffset is invalid for subtract operator.