Как ни странно это может показаться, вы можете добавить/вычесть datetime
значения, и это, кажется, что это «нормальное» поведение.
Внутреннее значение 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
Такое поведение не является причудой реализация - это явно разрешено только для datetime
типа. Все остальные типы данных (например, datetime2, datetimeoffset) возвращают ошибку Operand data type datetimeoffset is invalid for subtract operator
.
В каких СУБД вы используете SQL-сервер, MySQL, Oracle и т. Д.? Является ли IST столбцом datetime? – SouravA
@Sourav_Agasti, я использую SQL-Server. – TheDProgrammer