2

これら 2 つの基準が同じ結果セットを返さない理由を誰かが理解するのを手伝ってくれるかどうか疑問に思っていました。私には、SQL Server 2008 R2 がデータを制約する際にオフセットを使用することを知らないというのは奇妙に思えます。これを行うより良い方法はありますか?私の知る限り、基準 2 が正しいデータを取得する唯一の方法です。

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

2 に答える 2

1

なぜ同じものを返すのでしょうか?基準 1 では、元の時間をオフセットと比較しています。基準 2 では、両方のオフセットを変更しています。

于 2010-10-21T23:04:48.573 に答える
0

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
于 2010-10-21T23:13:07.183 に答える