我想在Oracle数据库中将“ 2020-08-20T12:02:02Z”日期转换为DD-MM-YYYY。日期应该看起来像是20-08-2020。请告知。
答案 0 :(得分:0)
您可以尝试以下-
select to_char(
to_date('2020-08-20T12:02:02Z','YYYY-MM-DD"T"HH24:MI:SS"Z"'),
'DD-MM-YYYY')
from dual
答案 1 :(得分:0)
TL; DR:使用TO_CHAR( column_name, 'DD-MM-YYYY' )
显式格式化DATE
列。
DATE
列没有格式;它在内部存储为7个字节(分别是世纪,世纪,月,日,小时,分钟和秒)。直到用户界面尝试显示日期后,显示的值才根据NLS_DATE_FORMAT
会话参数进行隐式格式化(并且任何用户都可以在自己的会话中随时设置该日期,因此多个用户可以多种日期格式,并且这些隐式格式可以在会话中更改,因此您应该从不使用隐式格式来提供一致的输出)。
因此,如果您有一个DATE
并且它的值是2020-08-20T12:02:02Z
,那么您需要做的就是在显示它时格式化它(使用TO_CHAR
)而不显示时间分量:
CREATE TABLE table_name (
column_name DATE
);
INSERT INTO table_name ( column_name )
VALUES ( DATE '2020-08-20' + INTERVAL '12:02:02' HOUR TO SECOND );
设置日期的隐式格式:
ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD"T"HH24:MI:SS"Z"';
然后:
SELECT column_name AS with_implicit_formatting,
TO_CHAR( column_name, 'DD-MM-YYYY' ) AS with_explicit_formatting
FROM table_name;
输出:
WITH_IMPLICIT_FORMATTING | WITH_EXPLICIT_FORMATTING :----------------------- | :----------------------- 2020-08-20T12:02:02Z | 20-08-2020
db <>提琴here
注意:Z
格式模型暗含Zulu(UTC+0
)时区。但是,日期不存储时区。因此,如果您要存储此时区信息,则应使用TIMESTAMP WITH TIME ZONE
数据类型,而不要使用DATE
(并且从本地转换日期时间值时可能需要格外小心时区UTC+0
,您可以应用正确的时区偏移量转换为UTC+0
,而不仅仅是采用日期时间部分而忽略本地时区。