Следующий код дает мне это сообщение об ошибке - «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, и я боролся с ней некоторое время. Не уверен, что делаю не так. Спасибо за любую помощь!
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
Вы должны использовать 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;
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.