2011-11-28 58 views
1

以下評估將給我一個設置爲yyyymmdd格式的日期爲int。SSIS格式日期YYYYMMDD,日偏差爲X天?

我需要做的是在SSIS中有能力抵消X天的天數並相應地保持月份和年份的抵消。

我似乎找不到答案。每個人都有一個關於如何格式化它的例子,但是如果你需要在幾天,幾個月或幾年內用偏移量來格式化它,同時保持所有部分的準確性。

RIGHT((DT_STR,4,1252)YEAR(DATEADD("dd",0,getdate())),4) +""+ 
RIGHT("0" +(DT_STR,4,1252)MONTH(DATEADD("dd",-1,getdate())),2)+""+ 
RIGHT("0" +(DT_STR,4,1252)DAY(DATEADD("dd",0,getdate())) ,2) 

有人嗎?

在C#或TSQL中這很容易,但是這個SSIS正在增加我的耐心。

謝謝。

+0

可以執行存儲過程和結果裝載到一個變量,或者使用腳本任務,並設置變量呢?這似乎是一個更好的解決方案,因爲表達式的設計並不能處理太複雜的問題。 – msmucker0527

回答

3

這是一個可能的解決方案,可以讓你實現這一點。

在SSIS包中,聲明四個包範圍變量。

  1. TodaysDate - DateTime類型的變量。當您設置爲DateTime時,變量將被分配當前的日期和時間。您也可以更改並將其設置爲您選擇的日期。

  2. OffsetValue - Int32類型的變量。這將保存偏移值。對於這個例子,我選擇的偏移值是以天爲單位。因此,我已將其設置爲值7.

  3. OffsetDate - 類型DateTime的變量。選擇此變量並按F4查看屬性。將屬性EvaluateAsExpression更改爲True。將表達式設置爲值DATEADD("dd", @[User::OffsetValue] , @[User::TodaysDate] )。此表達式將偏移值添加到變量TodaysDate中,以便獲得新的OffsetDate。

  4. FormattedDate - 變量String。選擇此變量並按F4查看屬性。將屬性EvaluateAsExpression更改爲True。設置Expresstion爲以下值

RIGHT((DT_STR,4,1252)YEAR(DATEADD("dd",0, @[User::OffsetDate])),4) +""+ RIGHT("0" +(DT_STR,4,1252)MONTH(DATEADD("dd",-1,@[User::OffsetDate])),2)+""+ RIGHT("0" +(DT_STR,4,1252)DAY(DATEADD("dd",0,@[User::OffsetDate])) ,2)

唯一的區別是要格式化您選擇的日期,這裏在這種情況下變量OffsetDate值。該變量將保存已經被抵消的日期。

下面的屏幕截圖顯示了一個示例。變量TodaysDate設置爲11/28/2011。向變量添加7天將字段OffsetDate設置爲12/05/2011。如您所見,變量FormattedDate將新的抵消日期格式設置爲20111205

該實施例也可通過消除所述可變TodaysDate一個少變量來完成。您還可以爲每種類型(如日,月和年)提供一個偏移量變量。這一切都歸結於個人的偏好。

Example

我希望這是你要找的人,可能給你如何實現這一點的想法。

+2

也只是要知道,任何將使用日期變量,你可能會想要設置delayvalidation,以確保SSIS計算在運行時的正確值。 –

+0

溼婆,非常感謝你,它給了我一個肯定的一步!非常感激。 – nitefrog

1

我的個人偏好是在腳本任務中進行日期操作和格式化。 (假設你使用SSIS 2008腳本任務可以用C#編寫。)

1
"C:\\inetpub\\logs\\LogFiles\\W3SVC2\\u_ex" + 
    RIGHT("0" + (DT_STR,4,1252)DATEPART("yy" , DATEADD("dd" , -1, getdate())), 2) + 
    RIGHT("0" + (DT_STR,4,1252)DATEPART("mm" , DATEADD("dd" , -1, getdate())), 2) + 
    RIGHT("0" + (DT_STR,4,1252)DATEPART("dd" , DATEADD("dd" , -1, getdate())), 2) + ".log"