なぜAT TIME ZONEは非決定的ですか?


18

SQL Server 2016はAT TIME ZONE非決定的と思われます。ただし、これを公式に説明したり、その背後にある理由について理論的根拠を示したりする文書を見つけることができませんでした。

なぜAT TIME ZONE非決定的ですか?

非決定性を示す例

実行中:

CREATE TABLE Test (
    LegacyTimestamp DATETIME,
    Timestamp AS LegacyTimestamp AT TIME ZONE 'Eastern Standard Time' PERSISTED
); 

次のエラーを返します。

Msg 4936, Level 16, State 1, Line 1
Computed column 'Timestamp' in table 'Test' cannot be persisted because the column is non-deterministic.

4
三つの言葉。サマータイム。
パパラッチ

2
時間として知られる悪夢へようこそ。あなたが時間を保存するとき、それが必須であることをほとんど望みます、あなたも同様にどんなタイムゾーンも保存しました。私は頭痛薬をそんなに節約します。
エリックS

「AT TIME ZONEの非決定性を反映するために更新されるドキュメントを要求するMicrosoft Connectアイテムを作成しました。
ベングリバウド16

回答:


20

AT TIME ZONE いくつかのロジック使用して夏時間を計算します。DSTオフセット値は不変ではなく(Windows Update を介して変更される場合があります)、Windowsレジストリに外部的に含まれているため、AT TIME ZONE外部データに依存しているため、関数は確定的ではありません。

同様に、これがsys.time_zone_infoビューであり、静的参照テーブルではない理由です。最新のタイムゾーン情報を持つレジストリ値に応じて計算する必要があります。


1
しかし、変換される日付を参照して計算されるべきではありませんか?それは非決定的だ場合に何日夏時間が始まるのルールが将来変更される可能性があるので、それが2009年に行ったように、それは、だ
Random832

@ Random832そうです!私はこれについていくつかの詳細をスキップし、より明確になるように更新しました。
LowlyDBA

2
@ Random832は、過去の日付だけでなく、将来の日付も考慮します。将来の日が今日存在する時間変化の規則に基づいて保存されている場合、ルールは、今して間を変更した場合、値は無効になります
ダン・グスマン

1
ジョン:これは良い情報ですが、非決定的であるという実際の理由は単にレジストリから情報を取得することへの外部依存性によると言うために、これを少し技術的に正確に再構成するのではないでしょうか?確かに、なぜそれがほとんどのためにあるアプリのコード(すなわち根本原因)にハードコードされているとは対照的に、そこから情報を取得しなければならない頻度 DSTは、変更ルール、および新しいタイムゾーンを導入することができるという事実は、しかし、それは本当に二次的ですよね?しかし、「理由」に関係なく、外部の依存関係により、関数は非決定的になります。
ソロモンラッツキー16

1
驚くばかり!参考までに、ここでいくつかのかなり興味深い情報を見つけました-en.wikipedia.org/wiki/Tz_database-それはDSTが唯一のものではないことを示す数少ないドキュメントの少なくとも1つであると思われます(少なくとも今のところ見つけることができます)変更する。C:\ Windows \ Globalization \ Time Zone \ timezones.xmlファイルを見ればわかるように、ベースオフセットでさえ時間とともに変化する可能性がありますが、1970年以降はそれほど頻繁ではありません。+1 :
ソロモンラッツキー

1

AT TIME ZONEをDeterministic and Nondeterministicトピックの非決定的リストに追加し、トピックAT TIME ZONEに次のように追加しました。 AT TIME ZONE関数は非決定的として分類されます。これを持ってきてくれてありがとう。Rick Byham、SQL Server Books Online。


2
これは答えではなくコメントでなければなりません!
キンシャー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.