字符串到时间戳转换plsql
string to timestamp conversion plsql
我从 timestamp
外部来源继承了一些数据。这是某人作为 varchar2
放入仓库的。我需要将其转换为合法的 timestamp
但不确定如何。这就是字符串的样子。 “2021-04-23T11:02:17.00Z
”。
非常感谢您的帮助。
PS 理想情况下,我还想知道如何将其截断为更传统的 DD-MMM-YYYY
日期格式,例如21-Jan-2021
甚至 DD-MM-YYYY
都可以。
应该不会太难。提取“日期”部分,对其应用 TO_DATE
函数(使用适当的格式掩码),仅此而已。这意味着您应该在以下查询中“停止”在 date_value
处。最后一个 final_result
又是一个字符串,只是按照您想要的格式设置了格式。
SQL> with test (col) as
2 (select '2021-04-23T11:02:17.00Z' from dual)
3 select substr(col, 1, 10) string,
4 --
5 to_date(substr(col, 1, 10), 'yyyy-mm-dd') date_value,
6 --
7 to_char(to_date(substr(col, 1, 10), 'yyyy-mm-dd'), 'dd-mm-yyyy') final_result
8 from test;
STRING DATE_VALUE FINAL_RESU
---------- ---------- ----------
2021-04-23 2021-04-23 23-04-2021
SQL>
为了避免这种“操作”,您甚至可以创建一个视图。例如:
这是 table 您目前拥有:
SQL> create table test as
2 (select 1 id, 'Littlefoot' name, '2021-04-23T11:02:17.00Z' col from dual);
Table created.
创建一个视图,重新使用我在上面发布的代码:
SQL> create or replace view v_test as
2 select id, name,
3 to_date(substr(col, 1, 10), 'yyyy-mm-dd') col
4 from test;
View created.
Select 来自:
SQL> select * from v_test;
ID NAME COL
---------- ---------- ----------
1 Littlefoot 2021-04-23
需要其他格式?没问题:
SQL> alter session set nls_date_format = 'dd-mon-yyyy';
Session altered.
SQL> select * from v_test;
ID NAME COL
---------- ---------- -----------
1 Littlefoot 23-apr-2021
SQL>
或者,将 TO_CHAR
应用于视图的 col
列(也在我首先发布的代码中进行了演示;请参阅 final_result
)。
您可以使用 TO_TIMESTAMP
函数来执行此操作。
尝试:
TO_TIMESTAMP('2021-04-23T11:02:17.00Z', 'YYYY-MM-DDTHH:MI:SS')
您可以在他们的 Documentation
中阅读有关此功能的更多信息
用to_timestamp_tz()
得到对应的timstamp with time zone
,用AT TIME ZONE
和[=15=转换成你想要的时区(比如sessiontimezone
) ] 到 timestamp
.
SELECT cast(to_timestamp_tz('2021-04-23T11:02:17.00Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF2:TZR') AT TIME ZONE sessiontimezone AS timestamp)
FROM dual;
我从 timestamp
外部来源继承了一些数据。这是某人作为 varchar2
放入仓库的。我需要将其转换为合法的 timestamp
但不确定如何。这就是字符串的样子。 “2021-04-23T11:02:17.00Z
”。
非常感谢您的帮助。
PS 理想情况下,我还想知道如何将其截断为更传统的 DD-MMM-YYYY
日期格式,例如21-Jan-2021
甚至 DD-MM-YYYY
都可以。
应该不会太难。提取“日期”部分,对其应用 TO_DATE
函数(使用适当的格式掩码),仅此而已。这意味着您应该在以下查询中“停止”在 date_value
处。最后一个 final_result
又是一个字符串,只是按照您想要的格式设置了格式。
SQL> with test (col) as
2 (select '2021-04-23T11:02:17.00Z' from dual)
3 select substr(col, 1, 10) string,
4 --
5 to_date(substr(col, 1, 10), 'yyyy-mm-dd') date_value,
6 --
7 to_char(to_date(substr(col, 1, 10), 'yyyy-mm-dd'), 'dd-mm-yyyy') final_result
8 from test;
STRING DATE_VALUE FINAL_RESU
---------- ---------- ----------
2021-04-23 2021-04-23 23-04-2021
SQL>
为了避免这种“操作”,您甚至可以创建一个视图。例如:
这是 table 您目前拥有:
SQL> create table test as
2 (select 1 id, 'Littlefoot' name, '2021-04-23T11:02:17.00Z' col from dual);
Table created.
创建一个视图,重新使用我在上面发布的代码:
SQL> create or replace view v_test as
2 select id, name,
3 to_date(substr(col, 1, 10), 'yyyy-mm-dd') col
4 from test;
View created.
Select 来自:
SQL> select * from v_test;
ID NAME COL
---------- ---------- ----------
1 Littlefoot 2021-04-23
需要其他格式?没问题:
SQL> alter session set nls_date_format = 'dd-mon-yyyy';
Session altered.
SQL> select * from v_test;
ID NAME COL
---------- ---------- -----------
1 Littlefoot 23-apr-2021
SQL>
或者,将 TO_CHAR
应用于视图的 col
列(也在我首先发布的代码中进行了演示;请参阅 final_result
)。
您可以使用 TO_TIMESTAMP
函数来执行此操作。
尝试:
TO_TIMESTAMP('2021-04-23T11:02:17.00Z', 'YYYY-MM-DDTHH:MI:SS')
您可以在他们的 Documentation
中阅读有关此功能的更多信息用to_timestamp_tz()
得到对应的timstamp with time zone
,用AT TIME ZONE
和[=15=转换成你想要的时区(比如sessiontimezone
) ] 到 timestamp
.
SELECT cast(to_timestamp_tz('2021-04-23T11:02:17.00Z', 'YYYY-MM-DD"T"HH24:MI:SS.FF2:TZR') AT TIME ZONE sessiontimezone AS timestamp)
FROM dual;