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

Jak przekonwertować ciąg DateTime na DateTime w SQL Server

W SQL Server 2008 możesz użyć datetimeoffset typ danych.

SELECT [Result] = CONVERT(datetimeoffset, '2005-08-08T00:01:00+01:00', 127)

Wyjście:

Result
----------------------------------
2005-08-08 00:01:00.0000000 +01:00

W SQL Server 2005 a wcześniej możesz obliczyć datę i przesunięcie UTC:

SELECT [LocalDate], [OffsetMinutes], [UtcDate]
FROM
(
    SELECT [IsoDate] = '2007-08-08T00:01:00+01:00'
) A
OUTER APPLY
(
    SELECT [LocalDate] = CONVERT(datetime, LEFT([IsoDate], 19), 126)
    , [OffsetMinutes] =
        CASE SUBSTRING([IsoDate], 20, 1)
            WHEN '+' THEN +1
            WHEN '-' THEN -1
        END
        * DATEDIFF(minute, 0,
            CAST(SUBSTRING([IsoDate], 21, 5) + ':00' AS datetime))
    WHERE [IsoDate] LIKE '____-__-__T__:__:__[+-]__:__'
) B
OUTER APPLY
(
    SELECT [UtcDate] = DATEADD(minute, -[OffsetMinutes], [LocalDate])
) C

Wyjście:

LocalDate               OffsetMinutes UtcDate
----------------------- ------------- -----------------------
2007-08-08 00:01:00.000 60            2007-08-07 23:01:00.000


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw N losowych wartości do tabeli

  2. uzyskać dostęp do nieznanych kolumn tabeli i wstawić je do nowej

  3. Sprawdź, czy pole jest numeryczne, a następnie wykonaj porównanie tylko na tych polach w jednej instrukcji?

  4. Przywracanie bazy danych SQL Server (T-SQL)

  5. numeric(38,0) jako kolumna klucza głównego; dobry, zły, kogo to obchodzi?