gpt4 book ai didi

ssis - 如何循环遍历存储为 For Loop 容器中的数字的日期值?

转载 作者:行者123 更新时间:2023-12-01 08:34:31 25 4
gpt4 key购买 nike

我有一个 For 循环容器 使用日期作为 InitExpression (@Load_Date) 但值是数字格式 (20120229) 和我需要它,因为我无法修改它。

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

如何在 SSIS 包的 For 循环容器中实现这一点?

最佳答案

这是您可以执行此操作的一种可能方式。下面的示例使用 SSIS 2012 .

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

声明以下变量:

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

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

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

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

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

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

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

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

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

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

Variables

如下图配置For循环容器:

  • 初始化表达式:@[User::Loop]=@[User::MinDate]
  • 评估表达式:@[User::Loop]<=@[User::MaxDate]
  • 赋值表达式:@[User::Loop]=DATEADD("dd", 1, @[User::Loop])

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

For loop

我在 For 循环中放置了一个脚本任务来说明示例包的执行。脚本任务将变量 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设置为 20120229MaxInteger设置为20120302,包在执行过程中会显示以下值。

希望对您有所帮助。

Output 1

Output 2

Output 3

关于ssis - 如何循环遍历存储为 For Loop 容器中的数字的日期值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13257068/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com