2017-10-16 131 views
0

我有一個SSIS包我正在努力。文件名是:ap_alpha100_p1_20171013_123456.txt如何驗證基於特定日期範圍的文件名?

我只想要包裹拿起那個文件,如果日期在過去幾天內。例如。

ap_alpha100_p1_20171013_123456.txt是正確的,因爲20171013 = 2017年10月13日

ap_alpha100_p1_20170613_123456.txt不正確,因爲20170613 = 2017年6月13日

我很新的SSIS並試圖谷歌類似的問題,但我的研究讓我想不起來。

回答

1

試試這個辦法:

  1. 創建從-每個 循環容器中的變量var_fileName來存儲文件名。
  2. 創建變量var_flag將設置爲 如果日期在本週內(可配置),則爲true,否則爲false。

  3. ForEach file enumerator和變量映射設置爲var_fileName創建一個for-each循環容器。 u1

  4. 在容器內創建一個script task。讀取變量:var_fileName。讀寫變量:var_flag。

  5. 將以下代碼放在腳本任務(C#)中。

     Dts.Variables["User::var_flag"].Value = false; 
    
         String a; 
         a = Dts.Variables["User::var_fileName"].Value.ToString(); //output: ap_alpha100_p1_20171010_123456 
         String b; 
         b = a.Substring(15, 8); //output: 20171010 
    
    
         string result = DateTime.ParseExact(b, "yyyyMMdd", 
             CultureInfo.InvariantCulture).ToString("yyyy-MM-dd"); //output: 2017-10-10 
    
         DateTime oDate = Convert.ToDateTime(result); //convert string to datetime 
         DateTime Today = DateTime.Today; 
         DateTime StartDate = Today.AddDays(-((int)Today.DayOfWeek)); 
         DateTime EndDate = StartDate.AddDays(7).AddSeconds(-1); 
    
         if (oDate > StartDate && oDate < EndDate) 
         { 
          Dts.Variables["User::var_flag"].Value = true; 
         } 
         else 
         { 
          Dts.Variables["User::var_flag"].Value = false; 
         } 
    

它應該是這樣的(爲了便於理解示出注釋):

i2

  • 現在簡單地使用script taskData Flow Task之間的約束約束條件爲@[User::var_flag] == TRUE
  • 邏輯是:如果日期在本週之間,那麼標誌變爲true,否則爲false。在真實情況下,執行數據流任務。