如何在For循环容器中循环存储为数字的日期值?

时间:2012-11-06 18:28:00

标签: ssis

我有一个For Loop Container使用的日期为InitExpression @Load_Date ),但值的格式为数字格式(20120229),我需要这样,因为我不能修改它。

现在,我想设置AssingExpression值,使 @Load_Date 变量可以递增,因为它是一个日期。换句话说,分配给变量 @Load_Date 的数字值 20120229 应增加到 20120301 ,因为这是下一个逻辑日期。

如何在SSIS包中的For循环容器中实现此目的?

2 个答案:

答案 0 :(得分:8)

这是一种可以实现此目的的方法。以下示例使用SSIS 2012

假设您有两个包含最小和最大日期范围的变量,但它们以数字格式存储,您仍然希望这些值遵守日期规则。

声明以下变量:

  • MinInteger - 此数据类型Int32的变量将以数字格式存储最小日期值。如果您使用的是SSIS 2012,建议将其创建为参数,以便在运行时轻松配置值。

  • MaxInteger - 此数据类型Int32的变量将以数字格式存储最大日期值。如果您使用的是SSIS 2012,建议将其创建为参数,以便在运行时轻松配置值。

  • MinString - 此数据类型String的变量会将数字格式的最小日期值转换为字符串,以便在拆分时更容易使用用于创建日期格式的值。将表达式设置为(DT_WSTR, 10) @[User::MinInteger]

  • MaxString - 此数据类型String的变量会将数字格式的最大日期值转换为字符串,以便在拆分时更容易使用用于创建日期格式的值。将表达式设置为(DT_WSTR, 10) @[User::MaxInteger]

  • MinDate - 此数据类型DateTime的变量将拆分最小日期的字符串值以制定日期值。将此变量的表达式设置为以下内容:

  

(DT_DATE)(SUBSTRING(@ [User :: MinString],1,4)+“ - ”+ SUBSTRING(@ [User :: MinString],5,2)+“ - ”+ SUBSTRING(@ [User :: MinString],7,2(2))

  • MaxDate - 此数据类型DateTime的变量将拆分最大日期的字符串值以制定日期值。将此变量的表达式设置为以下内容:
  

(DT_DATE)(SUBSTRING(@ [User :: MaxString],1,4)+“ - ”+ SUBSTRING(@ [User :: MaxString],5,2)+“ - ”+ SUBSTRING(@ [User :: MaxString],7,2(2))

如果您使用的是SSIS 2008 R2或以前的版本,则需要将上述最后四个变量的EvaluateAsExpression属性设置为 True

  • Loop - 此变量数据类型DateTime将用于循环For循环容器中的日期值。

Variables

配置For循环容器,如下所示:

  • InitExpression:@[User::Loop]=@[User::MinDate]
  • EvalExpression:@[User::Loop]<=@[User::MaxDate]
  • AssignExpression:@[User::Loop]=DATEADD("dd", 1, @[User::Loop])

样本会将值递增1天,但您可以根据需要对其进行配置。您还可以将 DATEPART 增量编号存储在另一个变量/参数中,以便于配置。

For loop

我在For循环中放置了一个Script Task来说明示例包的执行。脚本任务将变量User :: Loop设置为ReadOnlyVariables,并包含以下C#代码。

public void Main()
{
    MessageBox.Show(string.Format("Current loop variable value: {0}", Dts.Variables["Loop"].Value.ToString()));
    Dts.TaskResult = (int)ScriptResults.Success;
}

如果MinInteger设置为 20120229 MaxInteger设置为 20120302 ,则程序包将在执行期间显示以下值。< / p>

希望有所帮助。

Output 1

Output 2

Output 3

答案 1 :(得分:2)

将循环驱动程序存储为日期,以便它可以进行日期算术运算,然后使用由基于该日期的表达式驱动的变量,将其置于内部使用所需的格式中。