SWITCHOFFSET (Transact-SQL)
保存されているタイム ゾーン オフセットから、指定された新しいタイム ゾーン オフセットへと変更された datetimeoffset 値を返します。
Transact-SQL の日付と時刻のデータ型および関数の概要については、「日付と時刻のデータ型および関数 (Transact-SQL)」を参照してください。
構文
SWITCHOFFSET ( DATETIMEOFFSET, time_zone )
引数
DATETIMEOFFSET
datetimeoffset(n) 値に解決可能な式を指定します。time_zone
[+|-]TZH:TZM 形式の文字列、またはタイム ゾーン オフセットを表す (分の) 符号付き整数を指定します。夏時間は認識されて調整されているものと想定されます。
戻り値の型
DATETIMEOFFSET 引数の有効桁数を持つ datetimeoffset。
説明
SWITCHOFFSET は、datetimeoffset 値を選択して、当初保存されていたタイム ゾーン オフセットとは異なるタイム ゾーン オフセットに挿入する場合に使用します。 SWITCHOFFSET では、保存されている time_zone 値は更新されません。
SWITCHOFFSET を使用して、datetimeoffset 列を更新できます。
GETDATE() 関数で SWITCHOFFSET を使用すると、クエリの実行速度が低下する場合があります。クエリ オプティマイザーでは、GETDATE 値の正確な基数の推定を取得できないためです。 次の例に示すように、GETDATE 値を事前に計算してから、クエリでその値を指定することをお勧めします。 さらに、OPTION (RECOMPILE) クエリ ヒントを使用して、次に同じクエリが実行されるときに、クエリ オプティマイザーでクエリ プランが強制的に再コンパイルされるようにします。 そうすると、オプティマイザーは、GETDATE() の正確な基数の推定を取得し、より効率的なクエリ プランを生成します。
DECLARE @dt datetimeoffset = switchoffset (CONVERT(datetimeoffset, GETDATE()), '-04:00');
SELECT * FROM t
WHERE c1 > @dt OPTION (RECOMPILE);
使用例
次の例では、SWITCHOFFSET を使用して、データベースに保存されている値とは異なるタイム ゾーン オフセットを表示します。
CREATE TABLE dbo.test
(
ColDatetimeoffset datetimeoffset
);
GO
INSERT INTO dbo.test
VALUES ('1998-09-20 7:45:50.71345 -5:00');
GO
SELECT SWITCHOFFSET (ColDatetimeoffset, '-08:00')
FROM dbo.test;
GO
--Returns: 1998-09-20 04:45:50.7134500 -08:00
SELECT ColDatetimeoffset
FROM dbo.test;
--Returns: 1998-09-20 07:45:50.7134500 -05:00