Masalahnya adalah string Anda tidak format datetime SQL Server yang diterima. SQL Server mengenali ISO8601 formatnya, yaitu:
yyyy-mm-ddThh:mi:ss.mmm
Yang mana 03-02T16:48:00 untuk tanggal Anda di atas.
Lihat Gaya Tanggal Dan Waktu bagian.
Jadi pernyataan berikut akan gagal:
declare @date nvarchar(max) = '20130302T164800'
select convertedDate = cast(@date as datetime)
Jika Anda mengonversi string ke ISO8601 format, pernyataan akan berfungsi:
declare @date nvarchar(max) = '2013-03-02T16:48:00'
select convertedDate = cast(@date as datetime)
Anda dapat memperbarui format Anda ke satu SQL Server yang mengenali dan mentransmisikan string ke datetime dalam satu pernyataan:
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)
Ini hanyalah sebuah contoh, Anda dapat mengonversinya ke format apa pun yang dikenali oleh SQL Server, tetapi ini mengubahnya menjadi ISO8601 . Pada dasarnya, konversikan ke format lain untuk memungkinkan konversi berfungsi.