Q: Как получить дату со временем (часы, минуты, секунды) из 19-значного числа в Oracle - PullRequest
0 голосов
/ 06 февраля 2019

Я хочу получить дату и время из 19-значного числа в Oracle и не смог найти никакого решения для этих больших чисел.Время должно быть в формате HH24: MI: SS.Я могу получить дату, но не могу получить время.

** Примеры номеров для получения даты и времени:

1190205161950369000 , 1190206092859146000 , 1181230172734928000 , 1181108121251823000

Для этих чисел, указанных выше, я добавил их в дополнениезначение "19000000000000000000" и подстрока первых 8 цифр от общего значения, так что первые 8 цифр дают мне дату (ггггммдд).

Например:

SUBSTR (1190205161950369000 + 19000000000000000000,0,8) = 20190205

Следовательно, дата 05-02-2019 (ДД-ММ-ГГГГ).Но чтобы получить время, даже если я увеличу длину подстроки с 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;

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Похоже, что часть времени содержит доли секунды, состоящие из шести цифр.Вы можете преобразовать это так:

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
0 голосов
/ 06 февраля 2019

Во-первых, для преобразования значения это работает:

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
...