【问题标题】:Datetime conversion error in SSIS from US date format美国日期格式的 SSIS 中的日期时间转换错误
【发布时间】:2018-09-28 13:07:02
【问题描述】:

我的 SSIS 数据流有问题。我正在从 SalesForce Marketing Cloud 中提取数据。在其中一个数据扩展中,有一个日期字段(美国格式)。 问题是在提取数据时,转换是错误的。有时它会颠倒月份和日期,有时则不会。

Source:

Destination:

有谁知道为什么会错误地转换数据?我应该怎么做才能纠正它?

PS:当我执行 CONVERT(DATETIME, [CreatedDate], 101) 时,它可以工作,但如果有办法直接在 SSIS 中执行,那就太好了

谢谢。

【问题讨论】:

  • 该列的数据类型是什么?数据库不以任何格式存储日期,它们存储为数值。它们在屏幕上显示的格式仅取决于客户端和操作系统的文化
  • 在 Source 中,数据类型是 Datetime (US),在 Destination 中,它也是 Datetime (EU)
  • 没有 datetime (US) 或 datetime (EU) 在 sql server 中只有 Datetime(以及 datetime2 和 date offcourse)。您看到的不是它在您的数据库中的样子,而是您的客户端和/或显示它的操作系统
  • 我的意思是日期以美国格式存储在源数据库中(MM/DD/YYYY HH:MM:SS AM/PM 而不是 YYYY-MM-DD HH:MM:SS (标准 Sql Server))
  • 不,他们不是。数据库不使用任何格式来存储日期值。它们以数值形式存储,没有任何格式。您在屏幕上看到的格式是由软件完成的,而不是数据库

标签: sql sql-server ssis salesforce-marketing-cloud


【解决方案1】:

DateTime 数据类型格式取决于您的计算机文化。如果您想将DateTime 格式统一为相同的值。你需要使用CONVERT函数

那么您的转换类型可能是字符串,否则,结果将相同取决于您的计算机文化。

SELECT CONVERT(VARCHAR(10), GETDATE(), 103) + ' '  + convert(VARCHAR(8), GETDATE(), 14)

有一个更简单的方法使用FORMAT函数

SELECT FORMAT(GETDATE(),'dd/MM/yyyy hh:mm:ss')

【讨论】:

  • 是的,我明白。 SSIS 还将字段转换为正常日期格式 (YY-MM-DD HH:MM:SS)。问题是它转换错误(参见我的截图)
  • @Vladimir 我添加了更多解释和示例,您可以尝试一下
  • 谢谢D-Shih,很清楚。但实际上我已经尝试过了,我知道这很有效。我想要的不是 Sql 请求,而是 SSIS 直接正确地执行它(不像我的屏幕截图中那样)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多