oracle时间戳6转换为sql server datetime2错误

Posted

技术标签:

【中文标题】oracle时间戳6转换为sql server datetime2错误【英文标题】:oracle timestamp 6 convert to sql server datetime2 error 【发布时间】:2019-09-08 16:14:12 【问题描述】:

我正在使用 SSIS 将一些 oracle 数据转换为 sql server。我找到了这样的 Oracle date timestamp6

26-DEC-82 12.00.00.000000000 AM

会导致SSIS中的转换失败

错误:年、月和日参数描述了无法表示的内容

我认为这是因为 ssis 不知道是 2082 还是 1982,所以不知道如何转换。如何将 oracle 日期转换为 yyyy 年份部分?

更新:尝试了 Hadi 提到的 to_char 函数。我可以看到现在是 2682 年(其中大部分)。我添加了一张显示 to_char 的图片,以及 plate_date 和 sold_date 列的原始列。如您所见,大多数年份都是 26xx,但有两个例外是 18xx。谁能解释一下?

【问题讨论】:

那么,知道是1982还是2082吗?尝试使用 RR 格式掩码而不是 YY(在 Oracle 方面;我不会说 SQL Server)。 抱歉,我对 Oracle 真的不太了解。如果 oracle 不知道它是 1982 还是 2082,为什么 Oracle 允许这种格式?什么是 RR 格式? See this。看起来您需要更改传递数据的方式;最好作为实际日期/时间戳,但如果它必须是字符串,则使用 4 位数年份、月份数字等指定 Oracle 的输出格式。 This shows how to get a 'safe' format,但您可能需要特定于 SSIS 的内容(如果您无法确定预期的格式)。 @AlexPoole 所以它取决于客户端来显示值?但我的问题是客户永远不会知道它是 2082 年还是 1982 年(尽管很可能是 1982 年)。 oracle 内部知道吗?如果是,它能否以某种方式将其转换为年份部分的 yyyy 格式的字符串,以便客户知道该怎么做。 【参考方案1】:

在 Oracle 源代码中,使用 SQL 命令使用 TO_CHAR() 函数将 TimeStamp 转换为 nvarchar,并使用通用数据格式 yyyy-MM-dd HH:mm:ss

TO_CHAR(SOURCECOLUMN, 'YYYY-MM-DD HH24:MI:SS')

并在 SSIS 数据流中添加具有以下表达式的派生列:

(DT_DATE)[SOURCECOLUMN]

或者添加数据转换转换,将列转换为日期数据类型。

【讨论】:

【参考方案2】:

在 SQL Server 中,数据类型“timestamp”与日期或时间无关。

Microsoft 已将其旧的“时间戳”数据类型重命名为“rowversion”,因为它只是一个 8 字节的数字,用于记录一系列“行更改”事件。

另一方面,Oracle 的“时间戳”实际上是关于时间的,因为 Oracle 的“时间戳”扩展了它们的“日期”数据类型。 more here.

不幸的是,SQL Server 仍将“时间戳”识别为有效的数据类型名称

所以,我怀疑您的错误消息可能与时间戳-时间戳同音词有关。

【讨论】:

以上是关于oracle时间戳6转换为sql server datetime2错误的主要内容,如果未能解决你的问题,请参考以下文章

将 oracle sql 时间戳转换为 char Coldfusion

包含列的 SQL Server 索引 - 转换为 Oracle

如何将 SQL Server SMALLDATETIME 转换为 Unix 时间戳?

将 Epoch 时间戳转换为 sql server(人类可读格式)

如何将 SQL Server 的时间戳列转换为日期时间格式

Oracle数据库时间戳(6)转换为雪花timestamp_ntz时抛出错误