转换Oracle中的时区格式



我需要将以下时区格式转换为以下格式:

输入:2020-10-2820:12:20.986Z

输出:10月28日至20日上午8:12

我尝试了以下查询,但无法获取时间戳。请帮助。

select TO_TIMESTAMP(SUBSTR('2020-04-21T13:02:31.259Z',1,(INSTR('2020-04-21T13:02:31.259Z', 'T') - 1)),'YYYY-MM-DD HH24:MI:SS') from dual;

一个选项可能是这个

SQL>  alter session set nls_timestamp_format = 'dd-MON-YY hh:mi PM' ;
Session altered.
SQL> select to_timestamp('2020-10-28T20:12:20.986Z','yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') from dual ;
TO_TIMESTAMP('2020-10-28T20:12:20.986Z','YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
---------------------------------------------------------------------------
28-OCT-20 08:12 PM
SQL>

但如果你在没有任何会话设置的情况下更好地依赖to_timestamp功能,那么就更好了

SQL>  select to_timestamp('2020-10-28T20:12:20.986Z','yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"') from dual ;
TO_TIMESTAMP('2020-10-28T20:12:20.986Z','YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
---------------------------------------------------------------------------
28-OCT-20 08.12.20.986000000 PM

您有一个带时区的时间戳字符串,使用TO_TIMESTAMP_TZ而不是TO_TIMESTAMP,然后使用TO_CHAR对其进行格式化:

SELECT TO_CHAR(
TO_TIMESTAMP_TZ(
'2020-04-21T13:02:31.259Z',
'YYYY-MM-DD"T"HH24:MI:SS.FFTZR'
),
'DD-MON-RR HH12:MI AM',
'NLS_DATE_LANGUAGE=American'
)
FROM   DUAL;

db<gt;小提琴这里


注意:DATETIMESTAMPTIMESTAMP WITH TIME ZONE是二进制数据类型,以7-20字节存储(世纪、世纪年、月、日、小时、分钟和秒各1个字节,对于TIMESTAMP秒,小数秒最多6个可选字节,而对于TIMESTAMP WITH TIME ZONE,时区最多7个字节(。它从不以任何特定的格式存储

DATE/TIMESTAMP数据类型的显示方式取决于用于查询数据库的客户端应用程序;一些人可能会使用用户会话的NLS设置,但其他人则不使用。如果需要特定格式,请使用TO_CHARDATE/TIMESTAMP转换为字符串

最新更新