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

Konwertuj datę w formacie ISO na DATETIME

Problem polega na tym, że Twój ciąg nie akceptowany format daty i godziny programu SQL Server. SQL Server rozpoznaje ISO8601 format, czyli:

yyyy-mm-ddThh:mi:ss.mmm

Który byłby 2013-03-02T16:48:00 dla powyższej daty.

Zobacz Style dat i godzin sekcja.

Zatem następujące stwierdzenie nie powiedzie się:

declare @date nvarchar(max) = '20130302T164800'

select convertedDate = cast(@date as datetime)

Jeśli przekonwertujesz ciąg na ISO8601 format, oświadczenie będzie działać:

declare @date nvarchar(max) = '2013-03-02T16:48:00'

select convertedDate = cast(@date as datetime)

SQL Fiddle z wersją demonstracyjną .

Możesz zaktualizować format tak, aby SQL Server rozpoznawał i rzutował ciąg na datę i godzinę w jednej instrukcji:

declare @date nvarchar(max) = '20130302T164800'

select cast(left(@date, 4)
  + '-' + substring(@date,5,2)
  + '-' + substring(@date,7,5)
  + ':' + substring(@date,12,2)
  + ':' + substring(@date,14,2) as datetime)

SQL Fiddle z demo .

To tylko przykład, możesz przekonwertować go na dowolny format rozpoznawany przez SQL Server, ale to konwertuje go na ISO8601 . Zasadniczo przekonwertuj go na inny format, aby umożliwić konwersję.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:sprawdź, czy wyzwalacz jest włączony czy wyłączony?

  2. Plusy i minusy używania SqlCommand Prepare w C#?

  3. Jak DB_NAME() działa w SQL Server

  4. SQL:Wybierz dynamiczną nazwę kolumny na podstawie zmiennej

  5. 5 korzyści z proaktywnego monitorowania wydajności bazy danych