如何验证基于特定日期范围的文件名?
问题描述:
我有一个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并试图谷歌类似的问题,但我的研究让我想不起来。
答
试试这个办法:
- 创建从-每个 循环容器中的变量
var_fileName
来存储文件名。 创建变量
var_flag
将设置为 如果日期在本周内(可配置),则为true,否则为false。用
ForEach file enumerator
和变量映射设置为var_fileName
创建一个for-each循环容器。在容器内创建一个
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
和Data Flow Task
之间的约束约束条件为@[User::var_flag] == TRUE
。
逻辑是:如果日期在本周之间,那么标志变为true,否则为false。在真实情况下,执行数据流任务。