我想从Oracle中的19位数字中获取日期和时间,但是找不到用于此大数字的任何解决方案。时间应采用HH24:MI:SS格式。我可以检索日期,但无法获取时间。
**获取日期和时间的示例数字:
1190205161950369000 , 1190206092859146000 , 1181230172734928000 , 1181108121251823000
对于上面的这些数字,我在它们的总和前加上了一个附加值“ 19000000000000000000”,并从前8个子字符串中扣除,以便前8个数字为我提供日期(yyyymmdd)。
例如:
SUBSTR(1190205161950369000 + 19000000000000000000,0,8)= 20190205
因此,日期为05-02-2019(DD-MM-YYYY)。但是要获得时间,即使我将子串的长度从8增加到14或18,我仍然只能得到日期而不是时间。
使用的SQL查询:
Select to_date(SUBSTR(1190205161950369000+19000000000000000000,0,8),
'YYYYMMDD HH24:MI:SS') as truedate
from dual;
结果:
TRUEDATE
---------
05-02-2019
我也尝试过这种方法,但是不起作用:
Select to_date(SUBSTR(1190205161950369000+19000000000000000000,0,14),
'YYYYMMDD HH24:MI:SS.SSSSS') as truedate
from dual;
答案 0 :(得分:2)
首先,要转换值,这似乎可行:
select to_date(substr(to_char(1190205161950369000 + 19000000000000000000), 1, 14), 'YYYYMMDDHH24MISS')
from dual
默认情况下,日期不显示时间。您可以将其转换为字符串,也可以将其转换为时间戳:
select to_timestamp(substr(to_char(1190205161950369000 + 19000000000000000000), 1, 14), 'YYYYMMDDHH24MISS')
from dual;
通过将date
转换为timestamp
,您可以看到时间分量在那里:
select to_timestamp(to_date(substr(to_char(1190205161950369000 + 19000000000000000000), 1, 14), 'YYYYMMDDHH24MISS'))
from dual
答案 1 :(得分:2)
好像时间部分包含由六位数字组成的小数秒。您可以像这样转换它:
WITH tests AS (
SELECT 1190205161950369000 AS n FROM DUAL UNION
SELECT 1190206092859146000 FROM DUAL UNION
SELECT 1181230172734928000 FROM DUAL UNION
SELECT 1181108121251823000 FROM DUAL
)
SELECT n, TO_TIMESTAMP(TO_CHAR(n + 19000000000000000000), 'YYYYMMDDHH24MISSFF')
FROM tests