【问题标题】:Convert datetime formats to a particular format in SSIS将日期时间格式转换为 SSIS 中的特定格式
【发布时间】:2017-02-27 05:19:29
【问题描述】:

目标列数据应采用一种格式:

如何在 sql server 的目标表中以一种格式执行 HireDate 列。

【问题讨论】:

  • 您的源格式不明确。 01/10/2008 是 10 月 1 日还是 1 月 10 日?你不知道所以你不能转换它。另外忘记 SQL Server 中的日期“格式”。选择正确的数据类型DATE,忘记视觉格式
  • 除非您有办法确定平面文件中每条记录使用的日期格式,否则无法正确完成。正如@Nick.McDermaid 所写 - 所有日期小于 13 的日期都是模棱两可的。另外,你应该知道datetime data type does not save display format.
  • 如果它只有两种格式,即 yyyy/mm/dd 或 dd/mm/yyyy,我们可以更改为 yyyy/mm/dd 格式吗? @Nick.McDermaid
  • 但是你怎么知道哪一行有哪一种格式呢?你怎么知道 Sumit 是 dd/mm/yyyy 而不是 mm/dd/yyyy
  • 一旦你确定你需要自己尝试一些东西并发布你的尝试。

标签: ssis sql-server-2012 ssis-2012 msbi


【解决方案1】:

添加一个脚本组件,将HireDate标记为输入列,添加一个新的输出列outHireDate,数据类型为DT_DBTIMESTAMP

在脚本中写下:

声明一个格式数组:

Dim strFormats() as string = {"dd/MM/yyyy","yyyy/MM/dd","MM/dd/yyyy"}

Input0_ProcessInputRow子中使用DateTime.ParseExact函数如下:

Row.OutHireDate = DateTime.ParseExact(Row.HireDate,strFormats,New System.Globalization.CultureInfo("en-GB"))

重要提示

当日期和月份低于13时可能会导致冲突(例如:01/03/2010)

【讨论】:

  • 如果我们不知道哪一行的格式是什么,这是没有意义的。
  • @NickMcDermaid 我同意这一点,这就是我在回答中的重要说明中的意思
  • 先在“if”语句中验证或尝试解析(如果需要,嵌套)怎么样。
猜你喜欢
  • 1970-01-01
  • 2018-03-14
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多