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

Chuyển đổi cột Ngày giờ từ UTC sang giờ địa phương trong câu lệnh chọn

Bạn có thể thực hiện việc này như sau trên SQL Server 2008 trở lên:

SELECT CONVERT(datetime, 
               SWITCHOFFSET(CONVERT(datetimeoffset, 
                                    MyTable.UtcColumn), 
                            DATENAME(TzOffset, SYSDATETIMEOFFSET()))) 
       AS ColumnInLocalTime
FROM MyTable

Bạn cũng có thể làm ít dài dòng hơn:

SELECT DATEADD(mi, DATEDIFF(mi, GETUTCDATE(), GETDATE()), MyTable.UtcColumn) 
       AS ColumnInLocalTime
FROM MyTable

Dù bạn làm gì, không sử dụng - trừ ngày tháng, vì thao tác này không phải là nguyên tử và đôi khi bạn sẽ nhận được kết quả không xác định do điều kiện chủng tộc giữa ngày giờ hệ thống và ngày giờ cục bộ được kiểm tra tại các thời điểm khác nhau (tức là không phải nguyên tử).

Xin lưu ý rằng câu trả lời này không tính đến DST. Nếu bạn muốn bao gồm điều chỉnh DST, vui lòng xem thêm câu hỏi SO sau:

Cách tạo chức năng Bắt đầu và Kết thúc Tiết kiệm ánh sáng ban ngày trong SQL Server



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nối nhiều bảng trong SQL

  2. Sự khác biệt giữa Float và Numeric / Decimal trong SQL Server - SQL Server / T-SQL Tutorial Part 33

  3. Thay thế lần xuất hiện đầu tiên của chuỗi con trong một chuỗi trong SQL

  4. DAY () Ví dụ trong SQL Server (T-SQL)

  5. Trả về thông tin phiên bản hệ điều hành trong SQL Server bằng Chế độ xem quản lý động sys.dm_os_host_info