Problém je v tom, že váš řetězec není akceptovaný formát data a času serveru SQL Server. SQL Server rozpozná ISO8601 formát, což je:
yyyy-mm-ddThh:mi:ss.mmm
Což by bylo 2013-03-02T16:48:00 pro vaše datum výše.
Viz Styly data a času sekce.
Takže následující příkaz selže:
declare @date nvarchar(max) = '20130302T164800'
select convertedDate = cast(@date as datetime)
Pokud převedete řetězec na ISO8601 formátu, příkaz bude fungovat:
declare @date nvarchar(max) = '2013-03-02T16:48:00'
select convertedDate = cast(@date as datetime)
Formát můžete aktualizovat na jeden, který SQL Server rozpozná a přetypovat řetězec na datum a čas v jednom příkazu:
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)
Toto je pouze příklad, můžete jej převést na jakýkoli formát rozpoznávaný serverem SQL, ale tím jej převedete na ISO8601 . V zásadě jej převeďte do jiného formátu, aby převod fungoval.