Может ли функция TO_DATE возвращать TIMESTAMP? - PullRequest
1 голос
/ 11 июля 2019

Может ли в любой форме функция TO_DATE вернуть TIMESTAMP?Пример:

У меня есть следующий ввод: '2019-05-31 13:15:25.000000000' Я хочу получить '2019-05-31 13:15:25' в результате, используя TO_DATE, а не TO_TIMESTAMP.

Я пытался:

select to_date(substr('2019-05-31 13:15:25.000000000', 1, 19), 'YYYY-MM-DD HH24:MI:SS') from dual;

Но возвращается:

31/05/2019

Ответы [ 4 ]

2 голосов
/ 11 июля 2019

to_date возвращает date. Если вам нужен timestamp, вы должны использовать to_timestamp.

1 голос
/ 11 июля 2019

Если вы просто хотите отобразить значение временной метки как таковое, то сохраните style1, в противном случае, если вы хотите преобразовать в усеченное значение типа datetime, используйте style2, как показано ниже:

with t( ts ) as
(
 select systimestamp from dual
)
select to_char(ts,'YYYY-MM-DD HH24:MI:SS') as style1,
       to_timestamp(to_char(ts,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') as style2,
       ts as original
  from t;

STYLE1              STYLE2                           ORIGINAL
------------------- -------------------------------  -----------------------------------
2019-07-11 17:03:15 11-JUL-19 05.03.15.000000000 PM  11-JUL-19 05.03.15.298742 PM +01:00
1 голос
/ 11 июля 2019

TO_DATE используется для чтения имеющегося у вас формата даты, так как в вашем запросе он читается как YYYY-MM-DD HH24:MI:SS

     to_date(substr('2019-05-31 
    13:15:25.000000000', 1, 19), 'YYYY-. 
     MM-DD HH24:MI:SS') from dual

и предоставляет формат даты по умолчанию, а не формат метки времени по умолчанию вашей базы данных, чтобы манипулировать датой, которую вы можете использовать TO_CHAR(to_date(substr('2019-05-31 13:15:25.000000000', 1, 19), 'YYYY-. MM-DD HH24:MI:SS'),"your_format") from dual

или используйте to_timestamp (...)

0 голосов
/ 12 июля 2019

Вы конвертируете между date и timestamp значениями, используя cast.

Однако я не уверен, какой у вас начальный тип данных, или почему вам нужно to_date() специальновернуть отметку времени.

...