2013-03-11 1 views
1

Предупреждение - TSQL новичку вопрос впереди:Создать DateTimeOffset 00:01/23:59 от данного DateTimeOffset на тот же день

У меня есть DateTimeOffset, скажем, 2013-03-11 11:04:26.0000000 +00:00 и мне нужно создать две новые даты для в тот же день, один в 00:01 и еще один в 23:59.

До сих пор я пробовал различные вещи с DATETIMEOFFSETFROMPARTS и DATEPART но мне кажется, способ неудобно - есть простое решение отхватить часы/минуты/и т.д.. и просто используйте день, заменяющий время двумя требуемыми?

Любые намеки приветствуются.

+0

Посмотрите на [Лучший подход к удалить часть времени из DateTime в SQL Server] (http://stackoverflow.com/questions/1177449/best-approach- to-remove-time-part-of-datetime-in-sql-server), возможно, это полезно. –

+0

Вместо того, чтобы вычислять такие нечетные даты - если они предназначены для сравнения, было бы лучше изменить операцию сравнения (т.е. люди часто пытаются получить «последний момент» определенного дня, игнорируя, что это может случиться * во время * в последнюю минуту (или вторую) дня, и поэтому 23:59 не будут включать такие события). Использование '<' на следующий день, а не '<=' 23:59 - лучшее решение. –

+0

К сожалению, мы должны создать эти даты для представления временного окна для какой-либо другой части приложения - никакого сравнения не будет. – Jay

ответ

1

Также вы можете попробовать этот вариант

DECLARE @date datetimeoffset = '2013-03-11 11:04:26.0000000 +00:00' 
SELECT DATEADD(day, DATEDIFF(day, 0 , @date), '00:01'), 
     DATEADD(day, DATEDIFF(day, 0 , @date), '23:59') 

--Results:2013-03-11 00:01:00.000 2013-03-11 23:59:00.000 
+0

Еще лучше - приветствия! – Jay

+0

Добро пожаловать, Джей;) –

1

Понял ...

select @pkgDate = CONVERT (date, @pkgDate) 

select DATEADD (minute, 1, @pkgDate) 
select DATEADD(hour, 23, DATEADD (minute, 59, @pkgDate)) 

..better/более лаконичные способы сделать это до сих пор ценится.