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

Преобразувайте ISO форматирана дата в DATETIME

Проблемът е, че вашият низ е не приет формат за дата и час на SQL Server. SQL Server разпознава ISO8601 формат, който е:

yyyy-mm-ddThh:mi:ss.mmm

Което би било 2013-03-02T16:48:00 за вашата дата по-горе.

Вижте Стилове за дата и час раздел.

Така че следният оператор ще се провали:

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

select convertedDate = cast(@date as datetime)

Ако преобразувате низа в ISO8601 формат, операторът ще работи:

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

select convertedDate = cast(@date as datetime)

SQL Fiddle с демонстрация .

Можете да актуализирате вашия формат до такъв, който SQL Server разпознава, и да прехвърлите низа към дата и час в един израз:

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 с демонстрация .

Това е само пример, можете да го преобразувате във всеки формат, разпознат от SQL Server, но това го преобразува в ISO8601 . По принцип го преобразувайте в различен формат, за да може преобразуването да работи.




  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 връзка

  2. вземете всички вложени деца за идентификатор на родител

  3. T-SQL - Псевдоним с помощта на =срещу as

  4. Неочаквано поведение @@rowcount в UDF в MS SQL 2019

  5. Най-добри практики за сериализация на DateTime в .NET 3.5