Taskfactory过滤行转换表达式

时间:2015-04-06 14:09:09

标签: sql ssis

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

我正在使用的月份表达式是:

MONTH(GETDATE())
然而,这个表达很有效;我想过滤一个带有上述表达式的字段。 有些人喜欢:

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

有人可以帮助我使用正确的表达来过滤这个月和字段。表达式应仅过滤并返回月份数据。

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

谢谢, 阿龙

1 个答案:

答案 0 :(得分:1)

虽然我没有PragmaticWorks'安装了TaskFactory,查看documentation MONTH(GETDATE(), [TS Stage Open])看起来显然是错误的。它该怎么办?返回当前日期的月份编号和/或[TS Stage Open]

如果您想确保[TS Stage Open]的值和当前月份相同,那么根据样本,它就像In(MONTH([TS Stage Open]), MONTH(GETDATE())

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

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

在评论中,您已指出

  

我正在尝试将当月的所有记录返回2015年4月

显然上面只处理了Month方面。要计入年份,您需要将其表示为

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查询。