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

问题描述

我想在Oracle数据库中将“ 2020-08-20T12:02:02Z”日期转换为DD-MM-YYYY。日期应该看起来像是20-08-2020。请告知。

解决方法

您可以尝试以下-

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' )显式格式化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,而不仅仅是采用日期时间部分而忽略本地时区。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...