SQL преобразование даты, получая "Неверный номер" - PullRequest
2 голосов
/ 07 февраля 2020

Здравствуйте, у меня есть следующая дата в SQL ORCLE

2020-02-07 13:21:56.478000

И я хочу ее в следующем формате:

27-JAN-20 03.00.00.000000000 AM

Я погуглил и нашел to_char и to_date и придумал это

(TO_TIMESTAMP(TO_CHAR('2020-02-07 13:21:56.478000','DD-MON-YY HH:MI:SS.FF'))

Но я продолжаю получать "неверное число", а oracle не говорит мне, где оно. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 07 февраля 2020

Используйте следующий метод

to_char(
    timestamp '2020-02-07 13:21:56.478000',
    'DD-MON-YY HH:MI:SS.FF'
) 
1 голос
/ 07 февраля 2020

Проблема в том, что to_char() ожидает тип данных, подобный дате, в качестве аргумента, в то время как вы передаете ему строку.

Если вы имеете дело с литеральной строкой, то вы используете синтаксис литерала даты:

to_char(
    timestamp '2020-02-07 13:21:56.478000',
    'DD-MON-YY HH:MI:SS.FF AM'
) 

Если вы имеете дело со строковым столбцом, вы можете сначала превратить его в метку времени с помощью to_timestamp():

to_char(
    to_timestamp(my_string_col, 'YYYY-MM-DD HH24:MI:SS.FF'),
    'DD-MON-YY HH:MI:SS.FF AM'
)

Наконец, если вы имеете дело с timestamp, тогда вы можете использовать to_char() напрямую:

to_char(my_date_col, 'DD-MON-YY HH:MI:SS.FF AM')

Примечание: в вашем исходном модификаторе формата отсутствовала часть AM/PM, я ее добавил.

...