Извлеките месяц и год от даты в оракуле ORA-01722: Nombre non valide - PullRequest
0 голосов
/ 17 октября 2018

Итак, я пытаюсь извлечь месяц и год из даты для примера: 01/07/2018 вернет 'JUL-18'

Я пытаюсь выполнить этот простой запрос, чтобы попытаться извлечь

select TO_CHAR('01/10/2008','MON-YY') from dual

Но возвращается следующее исключение

ORA-01722: Nombre non valide

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

'01/10/2008' - это строка, а не дата.Есть четыре to_char() функции, которые принимают разные типы аргументов, и (предположительно из-за неявного преобразования приоритета) вы фактически заканчиваете тем, что вызываете to_char(number), а не (date)версия, которую вы намеревались.

Это означает, что вы фактически делаете TO_CHAR(TO_NUMBER('01/10/2008'), 'MON-YY'), и это неявный TO_NUMBER('01/10/2008'), который выбрасывает ORA-01722.

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

select TO_CHAR(TO_DATE('01/10/2008', 'DD/MM/YYYY'), 'MON-YY') from dual;

TO_CHA
------
OCT-08

Поскольку названия и сокращения месяцев зависят от настроек NLS, вы можетехотите переопределить настройки сеанса, чтобы получить согласованный результат:

alter session set NLS_DATE_LANGUAGE='FRENCH';

select TO_CHAR(TO_DATE('01/07/2018', 'DD/MM/YYYY'), 'MON-YY') from dual;

TO_CHAR(
--------
JUIL.-18

select TO_CHAR(TO_DATE('01/07/2018', 'DD/MM/YYYY'), 'MON-YY',
  'NLS_DATE_LANGUAGE=ENGLISH') from dual;

TO_CHA
------
JUL-18
0 голосов
/ 17 октября 2018

Вам нужно два шага здесь.Сначала используйте TO_DATE, чтобы преобразовать текстовую дату в истинную дату, а затем вызовите TO_CHAR, чтобы отформатировать ее так, как вы хотите:

SELECT TO_CHAR(TO_DATE('01/10/2008', 'DD/MM/YYYY'), 'MON-YY')
FROM dual;

OCT-08

Демо

Примечание. Было бы лучше, если возможно, просто работать с действительными литералами даты Oracle.Например, следующий запрос позволяет избежать вызова TO_DATE:

SELECT TO_CHAR(DATE '2008-10-01', 'MON-YY')
FROM dual;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...