如何将 21-03-18 14:01:03.000000000 AMERICA/TORONTO 转换为 2021-03-18 14:01:03.000-04:00

时间:2021-03-26 18:16:09

标签: sql oracle oracle11g oracle10g

请帮我将 TIMESTAMP(6) WITH TIME ZONE 数据类型中的输入“21-03-18 14:01:03.000000000 AMERICA/TORONTO”转换为输出“2021-03-18 14:01:03.000-04” :00" 在 Oracle 中。

2 个答案:

答案 0 :(得分:1)

如前所述,之前很多次,如果您的“输入”是 TIMESTAMP 类型的列或变量(该类型的任何变体),则数据NOT“21-03- 18 14:01:03.000000000 AMERICA/TORONTO"。Oracle DATE 和 TIMESTAMP 类型是内部二进制结构。“格式”是供人类阅读的字符串表示形式。

正如您的问题所读,答案只是使用 TO_CHAR 函数将该内部 TIMESTAMP 转换为您希望看到的任何格式:

select to_char(my_timestamp_column,'yyyy-mm-dd hh24:mi:ss') from my_table;

有关更多格式元素,请参阅 SQL 语言参考。

SQL> create table my_test (my_date TIMESTAMP(6) WITH TIME ZONE
  2                        )
  3  ;

Table created.

SQL> insert into my_test values (systimestamp);

1 row created.

SQL> commit;

Commit complete.

SQL> select to_char(my_date,'yyyy-mm-dd hh24:mi:ss.ff6TZH:TZM')
  2  from my_test
  3  ;

TO_CHAR(MY_DATE,'YYYY-MM-DDHH24:
--------------------------------
2021-03-26 14:29:21.570971-05:00

1 row selected.

SQL> --
SQL> drop table my_test purge;

Table dropped.

答案 1 :(得分:1)

好的 - 您的输入似乎是带时区的时间戳(以您的“输入”格式向您显示,但这与问题无关)。

您想以您选择的格式将其转换为字符串。

这可以按如下方式完成:

with
  inputs (ts_tz) as (
    select to_timestamp_tz('21-03-18 14:01:03.000000000 AMERICA/TORONTO',
                           'rr-mm-dd hh24:mi:ss.ff TZR')
    from   dual
  )
select to_char(ts_tz, 'yyyy-mm-dd hh24:mi:ss.ff3tzh:tzm') as result
from   inputs
;

RESULT                       
-----------------------------
2021-03-18 14:01:03.000-04:00