The*_*mer 3 sql sql-server time datetime subtraction
我有Crea_Date一个列,它是一个DateTime列。IST我想从Column中减去该列中的值crea_date,并返回一个包含该值的新列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
Run Code Online (Sandbox Code Playgroud)
提前致谢
尽管看起来很奇怪,但您可以添加/减去datetime值,这似乎是“正常”行为。
在内部,日期时间值存储为 的偏移量1/1/1900。如果我添加22/1/2015并且1/1/2015我得到,22/1/2130因为第二个值实际上是115在几年之后1900。
当您将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
Run Code Online (Sandbox Code Playgroud)
此行为不是实现怪癖 - 仅对该datetime类型明确允许。所有其他日期时间类型(例如 datetime2、datetimeoffset)都会返回 error Operand data type datetimeoffset is invalid for subtract operator。