如何将2020-08-20T12:02:02Z日期转换为DD-MM-YYYY sql?

如何将2020-08-20T12:02:02Z日期转换为DD-MM-YYYY sql?,sql,oracle,Sql,Oracle,我想在oracle数据库中将2020-08-20T12:02:02Z日期转换为DD-MM-YYYY。日期应该是2020年8月20日。请告知。您可以尝试以下方法- select to_char( to_date('2020-08-20T12:02:02Z','YYYY-MM-DD"T"HH24:MI:SS"Z"'), 'DD-MM-YYYY') from dual TL;DR:使用TO_CHAR column_nam

我想在oracle数据库中将2020-08-20T12:02:02Z日期转换为DD-MM-YYYY。日期应该是2020年8月20日。请告知。

您可以尝试以下方法-

select to_char(
             to_date('2020-08-20T12:02:02Z','YYYY-MM-DD"T"HH24:MI:SS"Z"'),
       'DD-MM-YYYY')
from dual
TL;DR:使用TO_CHAR column_name,'DD-MM-YYYY'明确设置日期列的格式

日期列没有格式;它在内部分别存储为7字节的世纪、世纪之年、月、日、小时、分钟和秒。直到用户界面尝试显示日期,显示的值才会基于NLS_date_FORMAT会话参数进行隐式格式设置,并且这可以由任何用户在其自己的会话中的任何时间进行设置,因此多个用户可以具有多个日期格式,并且这些隐式格式可以在会话中期更改,因此您永远不应该更改依靠隐式格式提供一致的输出

因此,如果您有一个日期,并且其值为2020-08-20T12:02:02Z,那么您需要做的就是在显示它时使用to_CHAR对其进行格式化,以不显示时间组件:

创建表名 列名称日期 ; 插入表\u name列\u name 值日期'2020-08-20'+间隔'12:02:02'小时到秒; 设置日期的隐式格式:

ALTER SESSION SET NLS_DATE_格式='YYYY-MM-DDTHH24:MI:SSZ'; 然后:

选择列\u name AS和\u implicit\u格式, 使用显式格式将“DD-MM-YYYY”作为字符列名称 从表_名称; 产出:

小提琴


注:Z格式模型表示祖鲁UTC+0时区。但是,日期不存储时区;因此,如果要存储此时区信息,则应使用时区数据类型的时间戳,而不是日期,并且在将日期时间值从本地时区转换为UTC+0时,可能需要格外小心,以应用正确的时区偏移量转换为UTC+0,而不只是使用日期时间组件和时间忽略本地时区。

日期存储为日期,但您可以选择从表中选择时如何显示日期。2020-08-20T12:02:02Z值的数据类型是什么,您将如何处理输出?将其存储在日期列中,或显示在报告/应用程序中?这假设OP的数据是字符串;不过OP说他们有日期。公平地说,“2020-08-20T12:02:02Z”看起来不像是从实际日期栏中得到的。它似乎更可能来自文件或应用程序,而OP不知道什么是Oracle日期。我当然在猜测,因为这是一条不成文的定律,关于日期处理的任何问题都不会指定数据类型。 WITH_IMPLICIT_FORMATTING | WITH_EXPLICIT_FORMATTING :----------------------- | :----------------------- 2020-08-20T12:02:02Z | 20-08-2020