Oracle 9:将日期从 mm/dd/yyyy hh:mm:ss 格式转换为 iso8601 格式的日期时间

Kur*_*ler 7 oracle

注意:我对该数据库只有读权限。

我需要将 Oracle 9 日期类型从 d/mm/yyyy hh:mm:ss 格式转换为 iso8601 标准。像下面的例子:

4/22/2015 12:02:56 AM => 2015-04-22T04:02:56.000Z

下面是一个将 Oracle 日期类型转换为 iso8601 格式字符串的查询。我需要一个 is8601 格式的日期。

SELECT sysdate,
    to_char((from_tz(to_timestamp(to_char(sysdate, 'YYYY-MM-DD HH:MI:SS PM'), 'YYYY-MM-DD HH:MI:SS PM') ,'America/New_York') at time zone 'UTC'),'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"') "iso8601"
FROM dual
Run Code Online (Sandbox Code Playgroud)

感谢您的任何帮助。


编辑:最终目标是获取这些日期并将它们作为日期时间插入到支持 rails 应用程序的 postgres 数据库中。

Wer*_*eit 9

您应该使用SYSTIMESTAMP而不是SYSDATE, 以获得小数秒(正如我所假设的那样)。

SYSTIMESTAMP返回数据类型TIMESTAMP WITH TIME ZONE,因此您不必明确指定。

所以它是:

SELECT
    TO_CHAR(
        SYSTIMESTAMP AT TIME ZONE 'UTC',
        'yyyy-mm-dd"T"hh24:mi:ss.ff3"Z"'
    )
FROM dual
Run Code Online (Sandbox Code Playgroud)


Bal*_*app 2

SQL> alter session set nls_timestamp_format = 'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"';

Session altered.

SQL> select cast (sysdate as timestamp) from dual;

CAST(SYSDATEASTIMESTAMP)
---------------------------------------------------------------------------
2015-07-18T01:26:09.000Z
Run Code Online (Sandbox Code Playgroud)

  • 仅当您的本地时区是 UTC 时,这才是正确的!请注意,如果用户更改了本地时区,则显示仍然是“....Z” - 这是错误的。与时区无关的格式为 `'YYYY-MM-DD"T"HH24:MI:SS.ff3TZH:TZM'` (4认同)