2014-01-13 4 views
5

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

Например:

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

Я хочу, чтобы вычислить еще два datetimeoffsets:

@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); 
+0

Если вы хотите, чтобы удалить часть времени, а затем использовать 'литой (@startdate как дата)'. –

+0

Не могли бы вы четко написать код, который вы пытались выполнить, и получить точный результат? – OzrenTkalcecKrznaric

ответ

3
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 
+0

Спасибо, что отлично работает. Не возражаете ли вы объяснить это немного больше? Кажется, что он соединяет строку из частей даты ввода. – Kev

+0

Хорошо. CONVERT (VARCHAR (20), (CONVERT (DATETIME, CONVERT (DATE, @ date))) вышеуказанная часть используется для получения даты со входа и преобразования ее в datetime, поэтому явное преобразование здесь делает время 00 : 00.00 – Kishore

+0

2. Здесь я получаю значение смещения от ввода с помощью строковых функций (функция справа), потому что функция даты имеет некоторые ограничения по сравнению с Timeoffset – Kishore

4
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)) 

 Смежные вопросы

  • Нет связанных вопросов^_^