首页 > 解决方案 > 无法转换为日期,收到“ORA-01855:需要 AM/AM 或 PM/PM”错误消息

问题描述

以下代码给了我这个错误信息 - “ORA-01855: AM/AM or 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 数据库没有太多经验,并且已经为此苦苦挣扎了一段时间。不知道我做错了什么。谢谢你的帮助!

标签: sqloracle

解决方案


看起来您可能已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<>小提琴


推荐阅读