在Oracle中,varchar字段中的日期格式为2018-06-02T17:31:55.461Z。如何将其转换为Oracle数据库中的标准日期字段?
create table testmp1
(raw_date varchar2(4000));
insert into testmp1
(raw_date)
values ('2018-06-02T17:31:55.461Z');
insert into testmp1
(raw_date)
values ('2018-06-02T17:32:48.042Z');
insert into testmp1
(raw_date)
values ('2015-04-29T19:51:30.0Z');
commit;
create table testmp2
(new_date date);
发布于 2018-06-03 05:01:13
您所拥有的是标准的JavaScript时间戳。在本例中,您要做的是将它们转换为Oracle值,然后可能再转换为TIMESTAMP
值。
将文本转换为TIMESTAMP
的格式掩码如下所示:
YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"
T
和Z
用双引号"
括起来;它们与Oracle无关,根本不需要它们。您使用FF3
来获取小数秒,因为有3位数的精度。总结这一切,你会得到:
SELECT TO_TIMESTAMP(raw_date, 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"')
FROM testmp1;
和:
INSERT INTO testmp2
( new_date )
SELECT CAST(TO_TIMESTAMP(raw_date, 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') AS DATE)
FROM testmp1;
编辑:@Egret下面的评论让我想到了时区。时间戳中的Z
表示零偏移量或UTC时间;要将其转换为您的本地时间,您需要执行以下操作:
SELECT TO_TIMESTAMP(raw_date, 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') - (SYS_EXTRACT_UTC(CURRENT_TIMESTAMP) - CURRENT_TIMESTAMP)
FROM testmp1;
如果转换为DATE
SELECT CAST(TO_TIMESTAMP(raw_date, 'YYYY-MM-DD"T"HH24:MI:SS.FF3"Z"') - (SYS_EXTRACT_UTC(CURRENT_TIMESTAMP) - CURRENT_TIMESTAMP) AS DATE)
FROM testmp1;
希望这能有所帮助。
发布于 2018-06-03 04:20:27
将字符串拆分为日期和时间,然后将其转换为日期,例如:
select to_date(substr('2015-04-29T19:51:30.0Z', 1, 10) ||
substr('2015-04-29T19:51:30.0Z', 12, 8),
'YYYY-MM-DDHH24:MI:SS') from dual;
这给了你一个日期。它假定时区始终相同。
发布于 2018-06-03 04:48:36
select cast(to_timestamp(raw_date,'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"') as DATE) from testmp1;
insert into testmp2 (new_date) (select cast(to_timestamp(raw_date,'YYYY-MM-DD"T"HH24:MI:SS.ff3"Z"') as DATE) from testmp1);
commit;
https://stackoverflow.com/questions/50660688
复制相似问题