我正在使用的数据库将其日期值存储为INT
。我需要确定两个date
字段之间的日期差异,但我不确定如何处理它,因为它们目前是INT
。
日期存储如下:20130101
- YYYYDDMM
。执行DATEDIFF会导致算术溢出错误。
有关如何转换两个date
字段或查找它们之间的日期差异的任何想法?
答案 0 :(得分:3)
Select Cast( Cast( 20130101 As varchar(8) ) As datetime )
因此,如果您有以下两个值:20130101
,20130201
,我们可能会执行以下操作:
Select DateDiff( d
, Cast( Cast( 20130101 As varchar(8) ) As datetime )
, Cast( Cast( 20130201 As varchar(8) ) As datetime ) )
如果您的值小于17530101
(日期时间的最小值),那么您将需要使用Case表达式来验证处理数据。在这种情况下,Cast(0 As datetime)
的使用将导致1900-01-01
作为我们的最低日期值。
Select DateDiff( d
, Case
When Value1 <= 19000101 Then Cast(0 As datetime)
Else Cast( Cast( Value1 As varchar(8) ) As datetime )
End
, Case
When Value2 <= 19000101 Then Cast(0 As datetime)
Else Cast( Cast( Value2 As varchar(8) ) As datetime )
End )
如果您要将日期存储为如图所示的整数,则更好的方法是更正数据并添加一个检查约束,以防止值低于1900-01-01
。如果您的合法值低于1900-01-01
,则需要对解决方案进行另一次调整。