Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Konwertuj kolumnę Datetime z UTC na czas lokalny w instrukcji select

Możesz to zrobić w następujący sposób w SQL Server 2008 lub nowszym:

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

Możesz też zrobić mniej gadatliwe:

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

Cokolwiek robisz, nie rób użyj - aby odjąć daty, ponieważ operacja nie jest niepodzielna, a czasami otrzymasz nieokreślone wyniki z powodu wyścigu między datą systemową a lokalną datą i godziną sprawdzaną w różnych momentach (tj. nieatomowo).

Należy pamiętać, że ta odpowiedź nie uwzględnia czasu letniego. Jeśli chcesz uwzględnić korektę czasu letniego, zapoznaj się również z następującym pytaniem SO:

Jak utworzyć funkcję rozpoczęcia i zakończenia czasu letniego na serwerze SQL



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nieużywany indeks programu SQL Server

  2. Automatyzacja zadań tworzenia kopii zapasowych i konserwacji za pomocą planu konserwacji w SQL Server

  3. 3 sposoby konwersji liczby całkowitej na dziesiętną w SQL Server

  4. Jak dodać grupę plików do bazy danych programu SQL Server (T-SQL)

  5. Zarządzaj współbieżnością transakcji za pomocą blokad w SQL Server