Het probleem is dat je string niet . is een geaccepteerde SQL Server datetime-indeling. SQL Server herkent de ISO8601 formaat, dat is:
yyyy-mm-ddThh:mi:ss.mmm
Wat zou zijn 02-03-2013T16:48:00 voor je date hierboven.
Zie Datum- en tijdstijlen sectie.
Dus de volgende verklaring zal falen:
declare @date nvarchar(max) = '20130302T164800'
select convertedDate = cast(@date as datetime)
Als u de tekenreeks converteert naar de ISO8601 formaat, zal de verklaring werken:
declare @date nvarchar(max) = '2013-03-02T16:48:00'
select convertedDate = cast(@date as datetime)
U kunt uw indeling bijwerken naar één SQL Server-herkenning en de tekenreeks casten naar een datetime in één instructie:
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)
Dit is slechts een voorbeeld, u zou het kunnen converteren naar elk formaat dat door SQL Server wordt herkend, maar dit converteert het naar ISO8601 . Converteer het in principe naar een ander formaat om de conversie te laten werken.