Проблемът е, че вашият низ е не приет формат за дата и час на 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 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 Server, но това го преобразува в ISO8601 . По принцип го преобразувайте в различен формат, за да може преобразуването да работи.