Tại sao AT TIME ZONE không đặc biệt?


18

SQL Server 2016 AT TIME ZONEdường như không đặc biệt. Tuy nhiên, tôi chưa thể tìm thấy tài liệu chính thức nêu rõ điều này hoặc đưa ra một lý do hợp lý về lý do đằng sau nó.

Tại sao AT TIME ZONEkhông đặc hiệu?

Ví dụ hiển thị tính không xác định

Đang thực hiện:

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

Trả về lỗi sau:

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

4
Ba từ. Giờ tiết kiệm ánh sáng ban ngày.
paparazzo

2
Chào mừng bạn đến với cơn ác mộng được gọi là thời gian. Tôi gần như muốn nó là bắt buộc khi bạn lưu trữ thời gian, bạn cũng lưu trữ múi giờ là tốt. Tôi sẽ tiết kiệm rất nhiều trong thuốc đau đầu.
Eric S

Chỉ cần tạo một mục Microsoft Connect yêu cầu tài liệu được cập nhật để phản ánh tính không xác định của 'AT TIME ZONE'.
Ben Gribaudo

Câu trả lời:


20

AT TIME ZONE sử dụng một số logic để tính thời gian tiết kiệm ánh sáng ban ngày. Các giá trị bù DST không phải là bất biến (chúng có thể thay đổi thông qua các bản cập nhật Windows ) và được chứa bên ngoài trong sổ đăng ký Windows, do đó, AT TIME ZONEchức năng này không thể xác định được vì nó phụ thuộc vào dữ liệu ngoài.

Tương tự, đây là lý do tại sao sys.time_zone_infolà một khung nhìn chứ không phải bảng tham chiếu tĩnh, nó cần được tính toán tùy thuộc vào các giá trị đăng ký có thông tin múi giờ cập nhật nhất.


1
Nhưng nó không nên được tính theo tham chiếu đến ngày được chuyển đổi? Nếu nó không mang tính quyết định, thì đó là bởi vì quy tắc tiết kiệm ánh sáng ban ngày bắt đầu có thể thay đổi trong tương lai, như đã từng xảy ra vào năm 2009.
Random832

@ Random832 Đúng rồi! Tôi đã bỏ qua một số chi tiết cho việc này, tôi đã cập nhật để rõ ràng hơn.
LowlyDBA

2
@ Random832, xem xét không chỉ ngày qua mà ngày trong tương lai. Nếu một ngày trong tương lai được lưu trữ dựa trên các quy tắc thay đổi thời gian tồn tại ngày hôm nay, giá trị sẽ trở nên không hợp lệ nếu quy tắc thay đổi giữa bây giờ và sau đó,
Dan Guzman

1
John: đây là thông tin tốt, nhưng sẽ không chính xác hơn về mặt kỹ thuật để sắp xếp lại điều này một chút để nói rằng lý do thực tế là nó không mang tính quyết định chỉ là do sự phụ thuộc bên ngoài vào việc lấy thông tin từ cơ quan đăng ký? Chắc chắn, tại sao nó phải lấy thông tin từ đó thay vì được mã hóa cứng vào mã ứng dụng (nghĩa là nguyên nhân gốc) chủ yếu là do các quy tắc DST thay đổi thường xuyên thực tế là các múi giờ mới có thể được giới thiệu, Nhưng đó thực sự là thứ yếu, phải không? Nhưng bất kể "tại sao", bất kỳ sự phụ thuộc bên ngoài nào cũng sẽ làm cho bất kỳ chức năng nào không mang tính quyết định.
Solomon Rutzky

1
Tuyệt vời! FYI, tôi đã tìm thấy một số thông tin khá thú vị ở đây - en.wikipedia.org/wiki/Tz_database - đó dường như là một trong số ít tài liệu (ít nhất là tôi có thể tìm thấy cho đến nay) chỉ ra rằng DST không phải là điều duy nhất thay đổi. Từ những gì tôi có thể biết từ việc xem tệp C: \ Windows \ Globalization \ Time Zone \ timezones.xml , ngay cả các độ lệch cơ sở cũng có thể thay đổi theo thời gian, mặc dù ít thường xuyên hơn kể từ năm 1970, tôi đoán vậy. +1 :-) (phải đăng lại vì liên kết này có một nhân vật xấu trong đó)
Solomon Rutzky

1

Tôi đã thêm AT TIME ZONE vào danh sách không xác định về chủ đề Xác định và Không xác định, và trong chủ đề AT TIME ZONE, tôi đã thêm: Vì một số thông tin (như quy tắc múi giờ) được duy trì bên ngoài Máy chủ SQL và có thể thay đổi thường xuyên, chức năng AT TIME ZONE được phân loại là không xác định. Cảm ơn bạn đã đưa lên đây. Rick Byham, SQL Server Sách trực tuyến.


2
Đây nên là một bình luận chứ không phải là một câu trả lời!
Kin Shah
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.