我正在工作的数据库将它们的日期值存储为INT
. 我需要确定两个date
字段之间的日期差异,但由于它们目前是INT
.
日期存储如下:20130101
- YYYYDDMM
。执行 DATEDIFF 会导致算术溢出错误。
关于如何转换两个date
字段或找到它们之间的日期差异的任何想法?
我正在工作的数据库将它们的日期值存储为INT
. 我需要确定两个date
字段之间的日期差异,但由于它们目前是INT
.
日期存储如下:20130101
- YYYYDDMM
。执行 DATEDIFF 会导致算术溢出错误。
关于如何转换两个date
字段或找到它们之间的日期差异的任何想法?
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
,则需要对解决方案进行另一次调整。