Taskfactory 过滤器行转换表达式

Taskfactory Filter Rows Transform Expression

我正在尝试编写一个表达式,通过带有任务工厂 "Filter Rows Transform 4.1.0.115" 的 SSIS 包过滤掉特定的数据集。

我使用的月份表达式是:

MONTH(GETDATE())

不过,这个表达式效果很好;我想用上面的表达式过滤一个字段。 有些喜欢:

MONTH(GETDATE(), [TS Stage Open])

谁能帮我用正确的表达方式来过滤这个月份和字段。表达式应该只过滤和return this months data with the month。

我不确定如何为此写出正确的表达式。任何帮助将不胜感激。

谢谢, 亚伦

虽然我没有安装 PragmaticWorks 的 TaskFactory,但查看 documentation MONTH(GETDATE(), [TS Stage Open]) 看起来显然是错误的。它应该做什么? Return 当前日期的月数 and/or [TS Stage Open].

如果要确保[TS Stage Open]的值与当前月份相同,那么根据示例,它会是In(MONTH([TS Stage Open]), MONTH(GETDATE())

MONTH([TS Stage Open]) == MONTH(GETDATE()

应与基本 SSIS 数据流控件以及 TF 一起使用。该表达式将我们列 [TS Stage Open] 的月份与当前月份进行比较,并为该操作生成一个布尔值 (true/false)。

在评论中,您已指出

I am trying to return current month all records for April 2015

很明显,以上仅处理月份方面。要考虑年份,您需要这样表示

MONTH([TS Stage Open]) == MONTH(GETDATE() && YEAR([TS Stage Open]) == YEAR(GETDATE()
  • ==做这些事情匹配
  • &&第一和第二件事是真的吗

不过需要注意的是,过滤器最好应用于源系统。如果您只需要当月,则无需在系统生命周期内提取数据。修改您的源查询以在数据库级别应用过滤器。

SELECT * 
FROM dbo.MySource AS D 
WHERE 
    D.[TS Stage Open] >= CAST(CURRENT_TIMESTAMP AS date)
    AND D.[TS Stage Open] < DATEADD(month, 1, CAST(CURRENT_TIMESTAMP AS date));

请注意,我不使用 BETWEEN,因为如果您不注意它可能会产生意想不到的后果(并且您的列有时间部分)。我也没有将函数应用于我的列,因此我们可以获得很好的 SARGable 查询。