SQL SSIS派生列公式/语法问题

时间:2013-03-04 20:04:12

标签: sql-server ssis

我有一个公式,我需要能够放入我的SSIS派生列......下面是..

if MONTH(Sls.SlsDt) + DAY(Sls.SlsDt) > MONTH(TODAY) + DAY(TODAY) then
    dYdtYr = 0.
  else
    dYdtYr = YEAR(Sls.SlsDt).

如何将上述业务逻辑放入SQL SSIS ETL派生列转换?

派生列是否是完成此任务的正确选项?

ETL包是从CSV到SQL登台表的导入,在此导入期间,我需要输出具有上述逻辑的新列(或替换现有的)。

输入行包含MONTH和DAY以及dYdtYr列。从某种意义上说,我需要根据上述逻辑用新值覆盖dYdtYr值。

2 个答案:

答案 0 :(得分:2)

派生列设置为替换列使其替换为dYtdYr。将以下内容放入表达式中:

(MONTH(Sls.SlsDt) * 100 + DAY(Sls.SlsDT) > MONTH(getdate())*100 + DAY(getdate())) ? 0 : YEAR(Sls.SlsDt)

这需要月份值(3月3日)乘以100得到300并将其添加到日期值(今天为04)并且显示类似0304的值。这将有效,以便一年中的任何一天或等于此值将小于该数字,并且今天之后的任何一天将更大。请注意,这不考虑年份。这意味着从3年前的12月31日将在dYtdYr获得0,但从3年前的3月3日将(今天)获得SlsDt的年份。我猜想如果这是你想要的结果,那你就是在努力建立年度YTD比较。

答案 1 :(得分:0)

如果您可以使用TSQL,则可以使用CASE声明

CASE 
 WHEN MONTH(Sls.SlsDt) + DAY(Sls.SlsDt) > MONTH(getDate()) + DAY(getDate()) 
 THEN dYdtYr = 0
ELSE
 dYdtYr = YEAR(Sls.SlsDt)
END AS ColumnName