我们以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并影响年度结果。
有什么想法吗?
答案 0 :(得分:2)
你的逻辑错了:
https://www.facebook.com/GaladariHotel
当然,如果你的商店的日期在DATEs,那么一切都会容易得多:)