2016-04-03 43 views
0

我們將日期保存在int格式的DWH中。 我想做一些簡單的Dateadd計算(加入和減去日期的幾個月),而不必轉換爲日期並轉換回int。未使用函數的日期加載

我已經能夠達到什麼收盤使用2種方法工作:
1.使用模和絕對功能:

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.By計算今年月,增加/減少所需的月再除以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

我對確切的日期,只是月份和年份沒有興趣,所以閏年對我沒有任何影響。 – Gidil

回答

2

你的邏輯是錯的:

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

當然,一切都會容易得多,如果你的店日期在日期:)