【发布时间】:2021-06-23 10:23:17
【问题描述】:
我们如何在 oracle SQL 中将“Mon Dec 21 00:00:00 EST 2020”转换为 dd/mm/yyyy?日期存储在数据类型 NVARCHAR2 中。
【问题讨论】:
-
Edit 问题并展示您已经尝试过的内容。解释失败的原因/位置。具体(错误消息、意外结果等)。
-
好的,日期存储为
NVARCHAR2(这并不理想-与您在此线程中的问题分开,您可能想调查为什么它不存储为TIMESTAMP WITH TIME ZONE)。请澄清你必须得到什么作为输出 - string?日期或带有时区的时间戳等没有“格式”,例如dd/mm/yyyy- 这种格式仅适用于日期或时间戳(有或没有时区)等的字符串表示 - 无论是在屏幕上或报告中显示它们,或者(可怕的做法!)将它们作为字符串存储在数据库中。所以,请澄清输出。 -
我只需要这种 NVARCHAR2 格式的日期
-
好的,但这是
date数据类型吗?还是某种字符串?而且,当您说“日期”时 - 您是否要删除时区规范以及时间(以便时间将是午夜,00:00:00)?您确实明白,Oracle 中的date总是 也有时间,对吧? (与其他一些数据库产品不同。) -
问题出在输入数据本身。 EST 并不含糊。但是 EDT 是模棱两可的——至少在 Oracle 中使用它作为时区区域的缩写。 EDT 适用于美国东部和加拿大,也适用于墨西哥坎昆和牙买加。后者在 2021 年不遵守夏令时;因此,如果不包括时区 region,则时区 DST 缩写无效,例如
'America/New_York'或'America/Cancun'。这是不将日期(以及带有时区的时间戳)存储为字符串的众多原因之一 - 您无法立即看到无效值。
标签: sql oracle oracle11g oracle10g