我需要将以下时区格式转换为以下格式:
输入: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;小提琴这里
注意:DATE
、TIMESTAMP
和TIMESTAMP WITH TIME ZONE
是二进制数据类型,以7-20字节存储(世纪、世纪年、月、日、小时、分钟和秒各1个字节,对于TIMESTAMP
秒,小数秒最多6个可选字节,而对于TIMESTAMP WITH TIME ZONE
,时区最多7个字节(。它从不以任何特定的格式存储
DATE
/TIMESTAMP
数据类型的显示方式取决于用于查询数据库的客户端应用程序;一些人可能会使用用户会话的NLS设置,但其他人则不使用。如果需要特定格式,请使用TO_CHAR
将DATE
/TIMESTAMP
转换为字符串