Bạn có thể sử dụng SWITCHOFFSET()
chức năng trong SQL Server để thay đổi độ lệch múi giờ trên datetimeoffset giá trị.
Hàm chấp nhận hai đối số; a datetimeoffset (n) giá trị (hoặc một biểu thức có thể được giải quyết thành datetimeoffset (n) value) và múi giờ mới.
Ví dụ
Đây là một ví dụ để chứng minh.
DECLARE @dto datetimeoffset = '2020-12-20 17:33:59.8900000 +02:00';
SELECT
@dto AS [Original],
SWITCHOFFSET(@dto, '+04:00') AS [Modified];
Kết quả (sử dụng đầu ra dọc):
Original | 2020-12-20 17:33:59.8900000 +02:00 Modified | 2020-12-20 19:33:59.8900000 +04:00
Lưu ý rằng độ lệch múi giờ được chỉ định dưới dạng một chuỗi. Điều này là do tôi đã cung cấp nó trong vài giờ.
Khi được chỉ định bằng giờ, độ lệch múi giờ phải sử dụng định dạng [+ | -] TZH:TZM và được chỉ định dưới dạng chuỗi (được đặt trong dấu ngoặc kép).
Sử dụng Phút làm Chênh lệch Múi giờ
Ngoài ra, bạn có thể chỉ định chênh lệch múi giờ theo phút. Khi thực hiện việc này, bạn phải chỉ định nó là một số nguyên.
DECLARE @dto datetimeoffset = '2020-12-20 17:33:59.8900000 +02:00';
SELECT
@dto AS [Original],
SWITCHOFFSET(@dto, 240) AS [Modified];
Kết quả (sử dụng đầu ra dọc):
Original | 2020-12-20 17:33:59.8900000 +02:00 Modified | 2020-12-20 19:33:59.8900000 +04:00
Ví dụ về cơ sở dữ liệu
Đây là một ví dụ về việc sử dụng SWITCHOFFSET()
trên giá trị từ một cột trong bảng cơ sở dữ liệu.
CREATE TABLE Test
(
Col1 datetimeoffset
);
INSERT INTO Test
VALUES ('1967-12-20 17:33:59.8900000 -07:00');
SELECT
Col1,
SWITCHOFFSET(Col1, '-08:00') AS Modified
FROM Test;
Kết quả (sử dụng đầu ra dọc):
Col1 | 1967-12-20 17:33:59.8900000 -07:00 Modified | 1967-12-20 16:33:59.8900000 -08:00
Hiệu suất khi sử dụng Giá trị GETDATE ()
Microsoft khuyên rằng sử dụng SWITCHOFFSET()
với GETDATE()
hàm có thể khiến truy vấn chạy chậm, do trình tối ưu hóa truy vấn không thể có được ước tính số lượng chính xác cho datetime giá trị.
Để giải quyết sự cố này, hãy sử dụng OPTION (RECOMPILE)
gợi ý truy vấn. Điều này buộc trình tối ưu hóa truy vấn phải biên dịch lại một kế hoạch truy vấn vào lần tiếp theo cùng một truy vấn được thực thi.
Bạn không biết chênh lệch múi giờ?
Nếu bạn không biết độ lệch múi giờ để sử dụng, đây là cách lấy danh sách múi giờ được hỗ trợ trong SQL Server.
Một điều bạn cần lưu ý là tiết kiệm ánh sáng ban ngày. Nhiều quốc gia / khu vực có các quy tắc cụ thể của riêng họ để tuân thủ mức tiết kiệm ánh sáng ban ngày (và một số không tuân theo quy tắc này). Điều này có thể gây ra tất cả các loại vấn đề khi bạn đang cố gắng tìm xem có nên tính tiết kiệm ánh sáng ban ngày vào chênh lệch múi giờ của mình hay không.
May mắn thay, SQL Server đã đưa ra một cách để giải quyết vấn đề này. SQL Server 2016 đã giới thiệu AT TIME ZONE
mệnh đề. Mệnh đề này cho phép bạn chỉ định tên của múi giờ, thay vì độ lệch múi giờ của chính nó. Do đó, bạn có thể chỉ cần sử dụng "Giờ chuẩn miền núi Hoa Kỳ" hoặc "Giờ chuẩn Ấn Độ" hoặc bất kỳ múi giờ nào có thể áp dụng.
Xem Chuyển đổi một ngày sang một múi giờ khác để biết các ví dụ về cách thực hiện việc này.