在CAST期间处理糟糕的日期

时间:2012-11-02 20:14:34

标签: sql-server tsql

我怎样才能优雅地处理随机出现在我桌子上的坏日期整数?例如,我有时会看到一些9999999999,因此这个查询会爆炸。我想在这些情况下只生成1900日期而不是像这样停止:

Select convert(date,CAST(trandate as varchar(8))),
       convert(date,CAST(duedate as varchar(8))), 
        ...

FROM  SomeTable

对于这些字段,该表中的有效日期如下所示:20100924,当它们点击此查询时,这些日期正常。

2 个答案:

答案 0 :(得分:3)

您可以在sql server中使用isdate内置函数来检查某些内容是否可以转换为日期,然后处理它。

示例:

declare @mytable table (thedate varchar(20))
insert into @mytable values ('20100924')
insert into @mytable values ('99999')

select 
case when isdate(thedate)=1 then
    CAST(thedate as datetime)
else null end as foo
from @mytable

答案 1 :(得分:2)

您可以使用CASE表达式与ISDATE结合使用来处理:

SELECT CASE 
    WHEN ISDATE(MyDate) = 0 
    THEN '19000101' 
    ELSE CAST(MyDate AS varchar(8)) 
END 
AS MyCorrectDate