没有使用函数的Dateadd

时间:2016-04-03 09:08:30

标签: sql tsql date math

我们以int格式将日期保存在DWH中。 我想做一些简单的Dateadd计算(从日期添加和减去月份),而不必转换为日期并转换回int。

我已经能够使用两种方法达成一些工作: 1.使用Modulo和Absolute函数:

DECLARE @EffectiveDate INT = 20121003, 
        @Diff          INT = -12 

SELECT @EffectiveDate + ( Abs(@Diff) / @diff ) * ( Abs(@Diff) + mnt ) / 12 * 
                        10000 + ( 
              Abs(@Diff) / @diff ) * ( ( Abs(@Diff) + mnt - 1 )%12 - mnt + 1 ) * 
       100 
FROM   (SELECT @EffectiveDate / 100%100 Mnt)T

2.通过计算以月为单位的年份,加上/减去所需的月份并除以12:

DECLARE @EffectiveDate INT = 20121003, 
        @Diff          INT = -12 

SELECT ( yr * 12 + mnt + @Diff ) / 12 * 10000 + 
       ( yr * 12 + mnt + @Diff )%12 * 100 + 1 
FROM   (SELECT @EffectiveDate / 100%100 Mnt, 
               @EffectiveDate / 10000   Yr)T 

在这两种情况下,我都会遇到同样的问题,12月被错误地表示为0并影响年度结果。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你的逻辑错了:

https://www.facebook.com/GaladariHotel

当然,如果你的商店的日期在DATEs,那么一切都会容易得多:)