【问题标题】:SSIS Using Derived column to reference column from same tableSSIS使用派生列来引用同一表中的列
【发布时间】:2012-07-27 20:01:11
【问题描述】:

我正在尝试将 xls 电子表格导入表中,其中一列需要从同一个表中的不同列派生。我想在导入阶段执行此操作,而不是在导入后创建一个 SQL 任务来执行此操作。在 SSIS 中创建表达式时我很糟糕,所以这可能是一项容易的任务——但我就是做错了。

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

这就是我想要使用的表达方式。

【问题讨论】:

  • 输入是什么,预期输出是什么?您似乎正在尝试获取当前月份的最后一秒。
  • 我正在尝试从列中的日期获取该月的最后一天

标签: sql-server excel ssis


【解决方案1】:

您想要以下内容:

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

1) 您需要使用 " 来包围您的日期部分。

2) 您需要将 0 日期转换为明确的日期类型。

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

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

(在我的版本(sql2008r2 和 excel 2007)上,显然 sql day 0 和 excel day 0 相差 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) )

【讨论】:

  • 很酷,当我周一上班时,我会做一些调整,看看会发生什么。谢谢
  • 那行不通。错误说 Datediff 不支持参数号 3 的数据类型 DT_R8
  • 一开始我错过了这是来自 Excel。源数据中数据列的格式是什么?它似乎以浮点数的形式进入 SSIS。请参阅此处的答案和 cmets 以获取可能的解决方案:stackoverflow.com/questions/9085928/…
  • 刚刚研究出如何在表达式中使用sql中的日期序列号
  • 我仍然无法正常工作。我想我只是要在导入后使用 SQL 任务来更新表。无论如何,我还有其他需要完成的后期处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多