2013-05-13 34 views
-2

我如何用null替換無效的日期時間?如何用NULL替換溢出?

我做上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這樣:

enter image description here

運行上面我的SQL語句時,我得到:

Msg 517, Level 16, State 1, Line 1 
Adding a value to a 'datetime' column caused overflow. 

我如何用null替換無效的日期時間?

+1

你爲什麼要把這些日子添加到1900而不是0001? 'SELECT DATEADD(DAY,734562,CAST('00010101'AS DATE))'工作正常並且返回'2012-03-01' – 2013-05-13 23:18:18

+0

@MartinSmith在sql server 0001中無效 – 2013-05-13 23:21:34

+0

是的(它有更新的數據類型)。請參閱編輯以前的評論。 – 2013-05-13 23:26:51

回答

0
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 

工程就像一個魅力!