Ich habe eine einzelne char(8)-Variable, die als ddmmyyyy in einer gespeicherten Prozedur formatiert ist (Qualität und Gültigkeit dieses Werts sind unbekannt und liegen außerhalb meiner Kontrolle). Was ist der beste und effizienteste Weg, um den Wert in eine Datetime-Variable zu verschieben und einen Fehler auszugeben, wenn er nicht gültig ist.
DECLARE @Source char(8)
DECLARE @Destination datetime
SET @Source='07152009'
--your solution here
SELECT @Destination
Das ist der beste Weg, den ich mir vorstellen kann:
DECLARE @Source char(8)
DECLARE @Temp varchar(10)
DECLARE @Destination datetime
set @Source='07152009'
SET @Temp=LEFT(@Source,2)+'/'+SUBSTRING(@Source,3,2)+'/'+RIGHT(@Source,4)
IF ISDATE(@Temp)!=1
BEGIN
RAISERROR('ERROR, invalid date',16,1)
END
SET @Destination=@Temp
SELECT @Source AS Source, @Temp AS Temp, @Destination AS Destination
EDIT Ich werde mich für Folgendes entscheiden...
DECLARE @Source char(8)
DECLARE @Destination datetime
set @Source='07152009'
BEGIN TRY
SET @Destination=CONVERT(datetime,RIGHT(@Source,4) -- YYYY
+LEFT(@Source,2) -- MM
+SUBSTRING(@Source,3,2) -- DD
)
END TRY
BEGIN CATCH
PRINT 'ERROR!!!' --I'll add a little more logic here and abort processing
END CATCH
SELECT @Source AS Source, @Destination AS Destination
0 Stimmen
Das scheint mir gut zu sein, das hätte ich auch geschrieben. Ich bin neugierig, ob es etwas Besseres gibt.