Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Преобразувайте колоната Datetime от UTC в местно време в оператора за избор

Можете да направите това по следния начин на SQL Server 2008 или по-нова версия:

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

Можете също да направите по-малко многословното:

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

Каквото и да правите, не използвайте - за изваждане на датите, тъй като операцията не е атомарна и понякога ще получите неопределени резултати поради условия на състезание между системната дата и час и местната дата и час, които се проверяват в различно време (т.е. неатомно).

Моля, имайте предвид, че този отговор не взема предвид DST. Ако искате да включите корекция за DST, моля, вижте и следния въпрос SO:

Как да създадете функция за начало и край на лятното часово време в 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. Как да махна колона с ограничение?

  2. Изпълнете динамична заявка с go в sql

  3. Какво представляват покриващите индекси и покрити заявки в SQL Server?

  4. Всичко, което трябва да знаете за SQL Server JOINS

  5. Как да експортирате резултата от заявката в .csv или разделен файл в табулатор в SQL Server Management Studio (SSMS) - SQL Server / TSQL урок, част 23