1

我正在工作的数据库将它们的日期值存储为INT. 我需要确定两个date字段之间的日期差异,但由于它们目前是INT.

日期存储如下:20130101- YYYYDDMM。执行 DATEDIFF 会导致算术溢出错误。

关于如何转换两个date字段或找到它们之间的日期差异的任何想法?

4

1 回答 1

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,则需要对解决方案进行另一次调整。

于 2013-08-19T17:05:15.303 回答