Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Thay đổi chênh lệch múi giờ trên giá trị datetimeoffset trong SQL Server (T-SQL)

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kiểm toán dữ liệu trong NHibernate và SqlServer

  2. Cách thay đổi thiết đặt cấu hình cho thư cơ sở dữ liệu trong SQL Server (T-SQL)

  3. 3 cách trả về một chuỗi nhiều không gian trong SQL Server

  4. Làm cách nào để gọi một thủ tục được lưu trữ với các đối số bằng sqlcmd.exe?

  5. T-SQL Làm thế nào để tạo bảng động trong các thủ tục được lưu trữ?