Изменение только временной части datetimeoffset в SQL


Как я могу задать только временную часть переменной SQL datetimeoffset?

Например:

DECLARE @date datetimeoffset = '2014-01-11 11:04:26 +02:00'

Я хочу вычислить еще два смещения даты и времени:

@startdate should be '2014-01-11 00:00:00 +02:00'
@enddate should be '2014-01-12 00:00:00 +02:00'
Но все решения, которые я пробовал, устанавливали смещение в ноль.

Примечание : Мне нужно исходное смещение в результатах, так как мне нужно сравнить их с некоторыми столбцами datetimeoffset в таблице. Так что просто кастинг на свидание не получится.

Дальнейшее Примечание : Это было бы довольно легко в SQL2012; я мог бы использовать DATETIMEOFFSETFROMPARTS. К сожалению, на данный момент я не могу перейти на 2012 год. Пример:

SET @startdate = SELECT DATETIMEOFFSETFROMPARTS(datepart(yyyy, @date), datepart(mm, @date), datepart(dd, @date), 0, 0, 0, 0, datepart(tz, @date), 0, 7);
2 5

2 ответа:

DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00'

SELECT @date InputDate,
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,@date)))) ) + ' ' + RIGHT(@date,6))) StartDate,
CONVERT(DATETIMEOFFSET,(CONVERT(VARCHAR(20),CONVERT(DATETIME,(CONVERT(DATETIME,CONVERT(DATE,DATEADD(day,1,@date))))) ) + ' ' + RIGHT(@date,6))) EndDate
DECLARE @date DATETIMEOFFSET = '2014-01-11 11:04:26 +02:00'

SELECT TODATETIMEOFFSET(CAST(@date AS date),DATEPART(tz,@date))
SELECT TODATETIMEOFFSET(DATEADD(day,1,CAST(@date AS date)),DATEPART(tz,@date))