Sql 如何用NULL替换溢出?

Sql 如何用NULL替换溢出?,sql,sql-server,tsql,sql-server-2008-r2,Sql,Sql Server,Tsql,Sql Server 2008 R2,如何用null替换无效的datetime 我正在对实际上是日期表示的INT列执行一些操作: select DATEADD(DD, rbaging.billing_period_end - 693594, '1900-01-01'), DATEADD(DD, rbaging.billing_period_apply - 693594, '1900-01-01'), * from [kslap208].[c021]..RB_Resident_Aging rbaging join

如何用null替换无效的datetime

我正在对实际上是日期表示的INT列执行一些操作:

select 


DATEADD(DD, rbaging.billing_period_end - 693594, '1900-01-01'),
DATEADD(DD, rbaging.billing_period_apply - 693594, '1900-01-01'),

*


 from 

[kslap208].[c021]..RB_Resident_Aging  rbaging

join
[kslap208].[c021]..PA_Profile_BASE_1119 pro
on rbaging.bill_to_profile_id=pro.profile_id   --4242

join 
[kslap208].[c021]..PA_Admit_Det_BASE_10 unit
on unit.profile_id=rbaging.bill_to_profile_id
rbaging表作为假定为日期的整数字段。以下是一个示例:

734562
734776
734837
文档说明如何将INT转换为date:

运行上面的sql语句时,我得到:

Msg 517, Level 16, State 1, Line 1
Adding a value to a 'datetime' column caused overflow.
如何用null替换无效的datetime


工作起来很有魅力

为什么要将天数添加到1900而不是0001?选择DATEADDDAY、734562、演员“0000101”作为日期,该日期工作正常并返回2012-03-01@MartinSmith在sql server 0001中,它与较新的数据类型不一致。请参阅“编辑到上一条注释”。@MartinSmith我相信他们正在使用一个链接服务器连接到一个没有日期数据类型的数据库。请参阅上一个问题-,我删除的答案/注释选择DATEDIFFDAY,'0000101','99991231'是3652058,所以这是不会导致溢出的最大整数。听起来这些数据都是胡说八道,但如果你有这种价值的话。
case when (rbaging.billing_period_end - 693594)>1
then DATEADD(DD, rbaging.billing_period_end - 693594, '1900-01-01')
else '' end,

case when (rbaging.billing_period_apply - 693594)>1
then DATEADD(DD, rbaging.billing_period_apply - 693594, '1900-01-01')
else ''
end