Следующий код дает мне это сообщение об ошибке - «ORA-01855: AM / A.M. или PM / PM. required»

SELECT TO_DATE
    ('2/2/2021 8:08:58 PM','MM/DD/YYYY HH:MI:SS AM') "NOW"
     FROM DUAL;

Если я попытаюсь вместо этого преобразовать в char, я получаю «ORA-01722: недопустимый номер».

     SELECT TO_CHAR('2/2/2021 8:08:58 PM', 'MM/DD/YYYY HH:MI:SS AM') "NOW"
     FROM DUAL;

У меня нет большого опыта работы с базой данных Oracle, и я боролся с ней некоторое время. Не уверен, что делаю не так. Спасибо за любую помощь!

1
Matěj Hostek 12 Фев 2021 в 12:27

2 ответа

Лучший ответ

Похоже, вы, вероятно, установили для NLS_DATE_LANGUAGE другое значение, кроме английского; но не NLS_LANGUAGE, так как это тоже повлияет на сообщение об ошибке:

alter session set nls_language = 'CZECH';

SELECT TO_DATE
    ('2/2/2021 8:08:58 PM','MM/DD/YYYY HH:MI:SS AM') "NOW"
     FROM DUAL;

ORA-01855: požaduje se AM/A.M. nebo PM/P.M.

С изменением только языка даты:

alter session set nls_language = 'ENGLISH';
alter session set nls_date_language = 'CZECH';

SELECT TO_DATE
    ('2/2/2021 8:08:58 PM','MM/DD/YYYY HH:MI:SS AM') "NOW"
     FROM DUAL;

ORA-01855: AM/A.M. or PM/P.M. required

Вы можете либо изменить настройку сеанса на английский, либо изменить строку, чтобы значение индикатора AM / PM соответствовало языку:

alter session set nls_date_language = 'CZECH';

SELECT TO_DATE
    ('2/2/2021 8:08:58 ODPOLEDNE','MM/DD/YYYY HH:MI:SS AM') "NOW"
     FROM DUAL;

NOW
---------
02-ÚNO-21

Или, что наиболее практично и просто, переопределите настройку сеанса в запросе:

alter session set nls_date_language = 'CZECH';

SELECT TO_DATE
    ('2/2/2021 8:08:58 PM','MM/DD/YYYY HH:MI:SS AM','NLS_DATE_LANGUAGE=ENGLISH') "NOW"
     FROM DUAL;

NOW
---------
02-ÚNO-21

db <> скрипка

1
Alex Poole 12 Фев 2021 в 11:46

Вы должны использовать TO_CHAR для преобразования даты в char, а не из char:

SELECT TO_CHAR(TO_DATE('2/2/2021 8:08:58 PM', 'MM/DD/YYYY HH:MI:SS AM'),
               'MM/DD/YYYY HH:MI:SS AM') "NOW"
  FROM DUAL;
0
Sergey Afinogenov 12 Фев 2021 в 09:35
66169261