Ich habe eine einzelne Variable char (8) formatiert als ddmmyyyy in einer gespeicherten Prozedur (Qualität und Gültigkeit dieses Wertes ist unbekannt und außerhalb meiner Kontrolle). Was ist der beste Weg, den Wert in eine Datetime-Variable zu verschieben und einen Fehler auszulösen, wenn es sich nicht um eine gültige Datetime handelt? beste Möglichkeit zum Konvertieren und Validieren einer Datumszeichenkette
DECLARE @Source char(8)
DECLARE @Destination datetime
SET @Source='07152009'
--your solution here
SELECT @Destination
hier ist der beste Weg, die ich denken konnte:
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 @[email protected]
SELECT @Source AS Source, @Temp AS Temp, @Destination AS Destination
EDIT hier ist, was ich mit ...
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
scheint gut für mich, das ist, was ich auch geschrieben haben. Ich bin gespannt, ob es besser ist. –