假设我想要sysdate,
SELECT SYSDATE as system_date FROM DUAL;
应以下列格式输出
14-Feb-2018 T19:50:02+00:00
即,
DD-MMM-YYYY Thh:mm:ss+HH:MM
答案 0 :(得分:2)
假设您知道日期代表UTC并希望修复+00:00部分:
select to_char(sysdate, 'DD-Mon-YYYY "T"HH24:MI:SS"+00:00"') from dual;
TO_CHAR(SYSDATE,'DD-MON-YYYY"T"HH24:
------------------------------------
14-Feb-2018 T20:13:08+00:00
格式模型元素are in the documentation。其中包括character literals部分,我已将其用于固定的T
和+00:00
部分。
正如@mathguy所说,这似乎有点不寻常;您可能实际上将该列保留为本机日期,并拥有您的应用程序或报告工具或其他任何格式。这取决于你究竟在做什么,以及你是否真的想直接从查询中获取字符串值。
由于你的更新问题现在没有那个伪时区,现在它更简单,但同样的想法:
select to_char(sysdate, 'DD-Mon-YYYY "T"HH24:MI:SS') from dual;
TO_CHAR(SYSDATE,'DD-MON-YYYY"T
------------------------------
14-Feb-2018 T20:17:50
如果您正在使用了解时区的数据类型 - 即不是普通的DATE
或TIMESTAMP
- 您可以使用相应的模型元素在格式中包含这些数据类型:
select to_char(systimestamp, 'DD-Mon-YYYY "T"HH24:MI:SSTZH:TZM') from dual;
TO_CHAR(SYSTIMESTAMP,'DD-MON-YYYY"T"
------------------------------------
14-Feb-2018 T20:24:58+00:00
恰好仍然显示+00:00
,因为我的系统位于英国。使用不同的值可以显示适当的值:
alter session set time_zone = 'AMERICA/NEW_YORK';
select to_char(current_timestamp, 'DD-Mon-YYYY "T"HH24:MI:SSTZH:TZM') from dual;
TO_CHAR(CURRENT_TIMESTAMP,'DD-MON-YY
------------------------------------
14-Feb-2018 T15:28:57-05:00
现在请注意我使用的是systimestamp
和current_timestamp
,它们是TZ感知的,而不是sysdate
或current_date
,它们不是 - 你会收到错误如果你试图从那些中获取TZH或TZM元素。
答案 1 :(得分:2)
您要求的格式没有多大意义。 +00:00 是时区偏移(否则它是什么?)但在Oracle中,DATE数据类型不知道时区。应该在Oracle中以这种方式格式化Oracle数据类型TIMESTAMP WITH TIME ZONE。
以下是如何使用TIME ZONE的时间戳来完成此操作。请注意,标准SYSTIMESTAMP函数是WITH TIME ZONE的时间戳。在下面的查询中,您可以使用我的会话的默认值查看时间戳的格式,然后使用显式格式模型。
SQL> select systimestamp,
2 to_char(systimestamp, 'dd-Mon-yyyy "T"hh24:mi:sstzh:tzm') as ts
3 from dual
4 ;
SYSTIMESTAMP TS
------------------------------------------- ---------------------------
14-FEB-18 12.14.18.537000 PM -08:00 14-Feb-2018 T12:14:18-08:00