На одно преобразование меньше, чем в решении @Phil Helmer:
SELECT DATEADD(DAY, DATEDIFF(DAY, '19000101', GETDATE()), '1899-12-26T12:01:00')
Поскольку некоторые люди, очевидно, не знают, что все «справа» от элемента, указанного в этой паре DATEADD
/ DATEDIFF
, эффективно берется из правой константы. Все, что «слева» (включая фактический элемент), может быть использовано для достижения эффекта смещения.
(В левом / правом верхнем углу предполагается, что все значение даты и времени интерпретируется с указанием года слева и миллисекундами справа, со всеми промежуточными значениями в порядке «размера»)
Отредактировано - я также обновил свой ответ, чтобы включить -6
в правое значение. Можно создать все виды смещения, выбрав подходящие значения для двух констант.
Взаимосвязь между двумя константами даты и времени, указанными в выражении, должна быть выражена, по крайней мере, в комментарии наряду с использованием. Выше я использую 1/1/1900 в качестве базовой точки и вычисляю количество полуночных переходов между тогда и сейчас (так как DATEDIFF
всегда работает). Затем я добавляю это количество дней к моменту времени 6 днями ранее (например, 26.12.1999) ровно в 00:01 утра ...