我正在制作一个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/06/13
我对SSIS很新,并试图谷歌解决类似的问题,但我的研究让我很短暂。
答案 0 :(得分:1)
尝试这种方法:
var_fileName
以存储for-each的文件名
循环容器。 创建一个将设置为的变量var_flag
如果日期在本周内(可配置),则为true,否则为false。
创建一个for-each循环容器,其ForEach file enumerator
和变量映射设置为var_fileName
。
在容器内创建script task
。读变量:var_fileName。读写变量:var_flag。
在脚本任务(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;
}
它应该看起来像这样(为了便于理解而显示的评论):
script task
的{{1}}和Data Flow Task
之间的约束。逻辑是:如果日期介于本周之间,那么flag将变为true,否则为false。在真实情况下,执行数据流任务。