【发布时间】:2021-05-19 14:24:58
【问题描述】:
我从 oracle 获取时间戳格式为 '01-APR-21 12.02.00.496677000 AM',我想更改格式以将数据加载到数据类型为 datetime 的 sql server 列中。
当前输入:'01-APR-21 12.02.00.496677000 AM' 预期输出:2021-04-01 12:02:00.496
我需要在 oracle 中编写代码来更改时间戳格式
谢谢 尼哈
【问题讨论】:
-
默认格式由会话的
nls_timestamp_format定义。您可以为当前会话更改它,但如果您将时间戳移动到不同的数据库,您关心时间戳的显示格式似乎很奇怪。任何 ETL 工具都应该只将数据从timestamp列移动到datetime,而不用担心如果它想要将timestamp隐式转换为varchar2,当前会话将使用什么格式。跨度> -
我无法更改 oracle 数据库中的任何内容,因为它不属于我们。我没有使用任何 ETL 工具,我必须通过 mule4 将数据加载到不同的数据库中
-
您可以更改会话设置,这不会更改数据库中的任何内容。如果您正在编写自己的 ETL 流程来提取数据,那么您需要解释您是如何做到的。例如,如果您正在查询一个表并将输出写入一个文本文件以供您稍后加载到 SQL Server 中,那么您可以设置会话的格式,或者使用
to_char()以及每个日期所需的格式/时间戳列。但我们需要知道您在做什么才能为您提供帮助。 -
MuleSoft 似乎不太可能无法从 Oracle 数据库中获取
timestamp并将其移动到 SQL Server 中的datetime而无需将timestamp隐式转换为 @987654330 @。当然,您可以在timestamp上执行明确的to_char以将其转换为您想要的任何格式的字符串。但是,再一次,这一步似乎不太必要。 -
重点是格式是一种输出属性,不是数据本身固有的。您可以更改会话(这不会更改数据库)以更改默认输出格式,或者您可以使用 to_char 更改查询中的输出格式,但这些只会影响数据的显示方式为人物。将数据从 Oracle 中的
timestamp迁移到 SQL Server 中的datetime不应该关心字符格式输出; ETL 工具应该能够执行从一种数据类型到另一种数据类型的直接转换。
标签: oracle