SSIS使用派生列引用同一表中的列

时间:2012-07-27 20:01:12

标签: sql-server excel ssis

我正在尝试将xls电子表格导入到表中,其中一列需要从同一个表中的不同列派生。我想在导入阶段执行此操作,而不是在导入后创建SQL任务来执行此操作。在SSIS中创建表达式时我很可怕,所以这可能是一项简单的任务 - 但我无法做到这一点。

DATEADD(s,-1,DATEADD(mm, DATEDIFF(m,0,columndata)+1,0))

这是我试图使用的表达方式。

1 个答案:

答案 0 :(得分:0)

您需要以下内容:

DATEADD("S",-1,DATEADD("M",DATEDIFF("M", (DT_DATE) 0,DATEADD("D",[dataDate],(DT_DATE)-2))+1,(DT_DATE)0) )

1)你需要使用“围绕你的日期部分。

2)您需要将0日期转换为显式日期类型。

此表达式采用dateserial数字[dataDate]列将该天数添加到日期-2

DATEADD("D",[dataDate],(DT_DATE)-2)

(显然sql第0天和excel第0天在我的版本(sql2008r2和excel 2007)上相差2天)并找到从日期0到该日期的月数,

DATEDIFF("M", (DT_DATE) 0,DATEADD("D",[dataDate],(DT_DATE)-2))

然后将该月数加1并将其重新添加到0

DATEADD("M",DATEDIFF("M", (DT_DATE) 0,DATEADD("D",[dataDate],(DT_DATE)-2))+1,(DT_DATE)0) 

(要在列日期值之后的下个月开始),然后从日期中减去1秒,以日期时间格式获取列日期值的月份的最后一秒。

DATEADD("S",-1,DATEADD("M",DATEDIFF("M", (DT_DATE) 0,DATEADD("D",[dataDate],(DT_DATE)-2))+1,(DT_DATE)0) )