У меня есть одна переменная char (8), отформатированная как ddmmyyyy в хранимой процедуре (качество и достоверность этого значения неизвестны и находятся за пределами моего контроля). Каков наилучший наиболее эффективный способ перемещения значения в переменную datetime и выдавать ошибку, если она недействительна datetime.лучший способ конвертировать и проверять строку даты
DECLARE @Source char(8)
DECLARE @Destination datetime
SET @Source='07152009'
--your solution here
SELECT @Destination
вот лучший способ, которым я мог думать:
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 вот что я собираюсь пойти с ...
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
Кажется, хорошо для меня, это то, что я написал бы тоже. Мне любопытно узнать, есть ли лучше. –