Какой формат oracle для последнего .0 в TO_DATE ('2020-04-01 00: 00: 00.0', 'ГГГГ-ММ-ДД ЧЧ24: MI: SS.TZR')? - PullRequest
0 голосов
/ 14 апреля 2020

Я получил эту дату от Java и является типом даты.

Поэтому попытка отформатировать ее в oracle

select TO_DATE ('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.TZR') from DUAL

не может отформатировать последнюю .0 в дате. Пробовал разными способами

.TZR
  TZR

Не знаете, как это отформатировать? Если я удаляю .0 и .TZR, то все работает нормально.

Я получаю следующую ошибку:

ORA-01820: код формата не может появиться в формате ввода даты 01820. 00000 - "код формата не может отображаться в формате ввода даты"

1 Ответ

1 голос
/ 14 апреля 2020

.0 - доли секунды, а не смещение часового пояса; но тип данных даты в любом случае не позволяет.

Если ваша строка всегда имеет .0, то вы можете рассматривать это как фиксированные символы, чтобы игнорировать ее:

select TO_DATE ('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS".0"') from DUAL;

TO_DATE('2020-04-01
-------------------
2020-04-01 00:00:00

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

select CAST( TO_TIMESTAMP ('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.FF') AS DATE) from DUAL;

CAST(TO_TIMESTAMP('
-------------------
2020-04-01 00:00:00

Элемент модели формата FF представляет доли секунды, а в качестве документации говорит , то есть «Действителен в форматах меток времени и интервалов, но не в форматах DATE».

Не совсем понятно, что означает получение значения из Java, но если вы делаете вызов JDB C и передача параметра в виде строки, вы должны отступить назад и использовать вместо этого правильный тип данных JDB C. Также обратите внимание на комментарий @ Оле об использовании современного типа данных Java, если можете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...