我正在尝试编写一个表达式,通过任务工厂“Filter Rows Transform 4.1.0.115”通过SSIS包过滤掉特定的数据集。
我正在使用的月份表达式是:
MONTH(GETDATE())
然而,这个表达很有效;我想过滤一个带有上述表达式的字段。
有些人喜欢:
MONTH(GETDATE(), [TS Stage Open])
有人可以帮助我使用正确的表达来过滤这个月和字段。表达式应仅过滤并返回月份数据。
我不知道如何为此编写正确的表达式。任何帮助将不胜感激。
谢谢, 阿龙
答案 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查询。