如何将此INT字段转换为可用的日期字段?

时间:2013-08-19 16:59:39

标签: tsql sql-server-2005 type-conversion

我正在使用的数据库将其日期值存储为INT。我需要确定两个date字段之间的日期差异,但我不确定如何处理它,因为它们目前是INT

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

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

1 个答案:

答案 0 :(得分:3)

Select Cast( Cast( 20130101 As varchar(8) ) As datetime )

因此,如果您有以下两个值:2013010120130201,我们可能会执行以下操作:

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