sql >> Databáze >  >> RDS >> Sqlserver

Převeďte sloupec Datetime z UTC na místní čas v příkazu select

Na serveru SQL Server 2008 nebo novějším to můžete provést následovně:

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

Můžete také udělat méně podrobné:

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

Ať děláte cokoli, nedělejte to použijte - odečíst data, protože operace není atomická a příležitostně získáte neurčité výsledky kvůli podmínkám závodů mezi systémovým datetime a místním datetime kontrolovaným v různých časech (tj. neatomicky).

Upozorňujeme, že tato odpověď nebere v úvahu letní čas. Pokud chcete zahrnout úpravu DST, podívejte se také na následující otázku SO:

Jak vytvořit funkci začátku a konce letního času v SQL Server



  1. Co dělá transakce kolem jednoho výpisu?

  2. Formátování řetězce UUID bez REGEXP_REPLACE a PL/SQL

  3. Dokumentace MAA pro Oracle Cloud

  4. Při hledání rychlého místního úložiště