【发布时间】:2010-11-11 09:48:52
【问题描述】:
我在存储过程中有一个格式化为 ddmmyyyy 的 char(8) 变量(该值的质量和有效性未知且超出我的控制范围)。将值移动到 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 @Destination=@Temp
SELECT @Source AS Source, @Temp AS Temp, @Destination AS Destination
编辑这就是我要使用的...
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
【问题讨论】:
-
对我来说似乎不错,这也是我会写的。我很想知道是否有更好的。
标签: sql-server sql-server-2005 tsql