SSIS 仅加载 Excel Sheet 的日期

SSIS Loading Just The Date From Excel Sheet

我有一个包含多个 sheet 的 Excel 文件,但只有第一个 sheet 列出了日期。我试图做的是读取 excel 文件,将其放入一个变量中,以便稍后在数据流任务中使用。

通常这将是您的 运行 工厂读写数据流任务,但由于此信息位于 excel sheet 的第一页,其中大部分信息关于该报告,它使阅读信息变得更加困难。

这是 sheet 的样子,我想从整个 sheet 中获得的唯一信息更具体地说是 Data Period 行, Dec 2016

任何方向将不胜感激,谢谢。

如果您使用 SSIS 将 "Data Period" 列的单元格内容加载到 SQL table 中,您可以轻松地将它们从 excel 日期格式转换SQL 日期格式使用以下之一:

日期和时间

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”.

Excel 工作表可以像表格一样查询。您可以使用 Execute SQL Task 来读取一系列单元格并迭代结果,或者您可以读取单个单元格,就好像它是一个范围并将其值存储在变量中。

该过程在 Read Excel Value in SSIS 中进行了描述,其中包含不少陷阱:

  1. 添加指向您的 Excel 文件的 Excel 连接管理器
  2. 将其结果类型设置为 Single Row
  3. 将查询设置为 SELECT * FROM [Sheet1$A6:A6]。这是第一个陷阱。您不能指定列名。在数据流查询中,您可以编写 SELECT RIGHT(F1,8) FROM [Sheet1$A6:A6] 以仅提取日期部分。这不起作用 Execute SQL Task.
  4. Result Set 部分,将0 结果集映射到一个新的字符串变量,例如PeriodCell。名称必须为 0。这是第二个陷阱
  5. 您可以根据 returns 只有 PeriodCell 最右边的 8 个字符的表达式创建另一个变量,例如 RIGHT( @[User::PeriodCell],8)

如果您的系统使用英语语言环境,您可以将字符串直接解析为日期。在这种情况下,您可以使用表达式 (DT_DATE)RIGHT( @[User::PeriodCell],8) 创建 DateTime 变量。例如,(DT_DATE)"Dec 2016" returns 1/1/2016

不幸的是,如果您的语言环境 不是 英语,这将不起作用,即使您更改了包的语言环境 属性。