我怎样才能优雅地处理随机出现在我桌子上的坏日期整数?例如,我有时会看到一些9999999999,因此这个查询会爆炸。我想在这些情况下只生成1900日期而不是像这样停止:
Select convert(date,CAST(trandate as varchar(8))),
convert(date,CAST(duedate as varchar(8))),
...
FROM SomeTable
对于这些字段,该表中的有效日期如下所示:20100924,当它们点击此查询时,这些日期正常。
答案 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