Использование DateTimeOffset в качестве критерия WHERE в запросе SQL Server 2008 - PullRequest
1 голос
/ 22 октября 2010

Мне было интересно, может ли кто-нибудь помочь мне понять, почему эти два критерия не возвращают одинаковые наборы результатов.Мне кажется странным, что SQL Server 2008 R2 не знает, как использовать смещение при ограничении данных.Есть лучший способ сделать это?Насколько я могу судить, Критерии Два - единственный способ получить правильные данные.

-- Criteria One
OriginationDateTimeOffset >= TODATETIMEOFFSET('2010-10-20', '-08:00') AND
OriginationDateTimeOffset < TODATETIMEOFFSET('2010-10-21', '-08:00')

-- Criteria Two
SWITCHOFFSET(OriginationDateTimeOffset, '-08:00') >= TODATETIMEOFFSET('2010-10-20', '-08:00') AND
SWITCHOFFSET(OriginationDateTimeOffset, '-08:00') < TODATETIMEOFFSET('2010-10-21', '-08:00')

Ответы [ 2 ]

1 голос
/ 22 октября 2010

С чего бы это вернуть то же самое? В критериях 1 вы сравниваете исходное время со смещением, тогда как в критериях 2 вы меняете смещение для обоих.

0 голосов
/ 22 октября 2010

TODATETIMEOFFSET преобразует значение (я) в datetimeoffset.SWITCHOFFSET изменяет значение на другое значение datetimeoffset.Например:

DECLARE @OriginationDateTimeOffset DATETIMEOFFSET = '2010-10-20'

SELECT @OriginationDateTimeOffset, 
    SWITCHOFFSET(@OriginationDateTimeOffset, '-08:00'),
    TODATETIMEOFFSET(@OriginationDateTimeOffset, '-08:00')

производит:

2010-10-20 00:00:00.0000000 +00:00
2010-10-19 16:00:00.0000000 -08:00
2010-10-20 00:00:00.0000000 -08:00
...