SSIS正在从Excel工作表加载date
我有一个多个工作表的Excel文件,但只有第一个工作表上列出的date。 我想要做的是读取excel文件,将其放入一个variables中,以便稍后可以在数据stream任务中使用。
通常情况下,这是你运行磨床读写数据stream的任务,但是由于这些信息位于Excel表格的第一页,主要是关于报表的信息,所以读取信息有点困难。
以下是工作表的样子,我想从整个工作表中得到的唯一信息就是更具体的数据周期行, Dec 2016
任何方向将不胜感激,谢谢。
Excel工作表可以像表一样查询。 您可以使用Execute SQL Task
来读取一系列单元格遍历结果,或者可以像读取范围一样读取单个单元格,并将其值存储在variables中。
这个过程在SSIS的Read Excel Value中有描述,并且包含了很多问题:
- 添加指向您的Excel文件的Excel连接器pipe理器
- 将其结果types设置为
Single Row
。 - 将查询设置为
SELECT * FROM [Sheet1$A6:A6]
。 这是第一个问题。 您不能指定列名称。 在数据stream查询中,您可以编写SELECT RIGHT(F1,8) FROM [Sheet1$A6:A6]
来只提取date部分。 这在Execute SQL Task
不起作用。 - 在
Result Set
部分中,将0
结果集映射到新的stringvariables,例如PeriodCell
。 名称必须是0.这是第二个问题 - 您可以根据只返回
PeriodCell
最右边8个字符的expression式创build另一个variables,例如RIGHT( @[User::PeriodCell],8)
如果系统使用英文区域设置,则可以将string直接parsing为date。 在这种情况下,可以使用expression式(DT_DATE)RIGHT( @[User::PeriodCell],8)
创buildDateTimevariables。 例如, (DT_DATE)"Dec 2016"
返回1/1/2016
不幸的是,即使你改变了包的Locale属性,如果你的语言环境不是英语,这也不行。
如果您已经将“数据周期”列的单元格的内容加载到具有SSIS的SQL表中,则可以将它们从exceldate格式轻松转换为SQLdate格式,并使用下列之一:
date和时间
select dateadd(second, (@time_xls - ROUND(@time_xls,0))*86400, dateadd(d, ROUND(@time_xls,0),'1899-12-30'))
例如,将值42853.4673611111转换为“2017-04-28 11:13:00.000”
只有约会
select dateadd(d,@time_xls,'1899-12-30')
例如,值36464被转换为“1999-10-31 00:00:00.000”。