Le problème est que votre chaîne n'est pas un format datetime accepté de SQL Server. SQL Server reconnaît la norme ISO8601 format, qui est :
yyyy-mm-ddThh:mi:ss.mmm
Qui serait 2013-03-02T16:48:00 pour votre date ci-dessus.
Voir Styles de date et d'heure rubrique.
Ainsi, l'instruction suivante échouera :
declare @date nvarchar(max) = '20130302T164800'
select convertedDate = cast(@date as datetime)
Si vous convertissez la chaîne en ISO8601 format, l'instruction fonctionnera :
declare @date nvarchar(max) = '2013-03-02T16:48:00'
select convertedDate = cast(@date as datetime)
Vous pouvez mettre à jour votre format vers un SQL Server reconnu et convertir la chaîne en une date/heure dans une seule instruction :
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)
Ceci n'est qu'un exemple, vous pouvez le convertir dans n'importe quel format reconnu par SQL Server, mais cela le convertit en ISO8601 . Fondamentalement, convertissez-le dans un format différent pour permettre à la conversion de fonctionner.