sql-server – 转换和验证日期字符串的最佳方式

前端之家收集整理的这篇文章主要介绍了sql-server – 转换和验证日期字符串的最佳方式前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个单一的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 @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,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 2005,您应该将您的代码可能失败到BEGIN TRY ….. END TRY BEGIN CATCH …. END CATCH块 – 尝试/捕获T-sql块!

第二,对于所有日期操作,我总是使用ISO-8601 format,这将工作,无论在sql Server中设置当前的日期格式.

ISO-8601格式仅适用于日期YYYYMMDD,或YYYY-MM-DDTHH:MM:SS与时间有关,因此我将编写代码

BEGIN TRY
  SET @Source='07152009'
  SET @Temp = RIGHT(@Source,4) +             -- YYYY
              LEFT(@Source,2) +              -- MM
              SUBSTRING(@Source,2)        -- DD

  IF ISDATE(@Temp)!=1
  BEGIN
      RAISERROR('ERROR,1)
  END

  SET @Destination = CAST(@Temp AS DATETIME)
END TRY
BEGIN CATCH
      -- handle error if something bombs out
END CATCH

不要依赖任何特定的日期格式设置!给我你的代码,我会尝试在瑞士 – 德国的系统 – 我几乎保证如果你盲目地假设“en-US”,因此“mm / dd / yyyy” – 这是不一样的设置无处不在这个星球

不幸的是,sql Server处理日期相当薄弱 – 也许这可能是在sql Server中使用CLR程序集的一个扩展点,这样可以在.NET中使用更丰富的日期处理函数.

渣子

PS:似乎ISO-8601格式我知道YYYY-MM-DD并不总是在sql Server中工作 – 与在线图书似乎宣讲相反.使用YYYYMMDD或YYYY-MM-DDTHH:MM:SS.谢谢,gbn!

猜你在找的MsSQL相关文章