如何修复 Oracle 中 SQL 中的 "ORA-01801: date format is too long for internal buffer" 错误

How to fix "ORA-01801: date format is too long for internal buffer" error in SQL in Oracle

我正在做一项作业,我需要在 SQL 中以非常具体的方式显示系统日期。表格应该如下:

仅首字母大写的星期几,罗马数字中的月份数字(大写),月份中的第几天,以大写字母 anno domini 拼写的年份,从带有短语 "Day of the year" 的儒略历,带有短语 "Seconds past midnight"

的午夜后秒数

我达到了午夜过后的实际秒数,但我似乎无法添加 "Seconds past midnight"。

我在网上查找了语法,但没有完全找到我需要的。可能我的搜索查询措辞不正确,或者我看得不够远。我的教科书对我来说也不是很清楚。我在那里看到的唯一一件事是对 CURRENTDATESYSDATE 之间的区别的解释。

这是我目前所拥有的。我意识到这可能是完全错误的。我试过没有 + 也没有引号。

SELECT TO_CHAR
    (SYSDATE, 'Dy, RM, D, YEAR AD, DDD "Day of the year", SSSSS "Seconds past midnight") "NOW"
     FROM DUAL;

我希望输出显示 Fri, IV, 19, TWENTY NINETEEN AD, 109 Day of the year, 73829 Seconds past midnight 但它给了我以下错误:ORA-01801: date format is too long for internal buffer

您可以作弊 - 将最后的硬编码文本连接到 TO_CHAR 的结果,而不是将其包含在格式模型中。

SELECT TO_CHAR(SYSDATE, 'Dy, RM, DD, YEAR AD, DDD "Day of the year ", SSSSS')
       || ' Seconds past midnight' "NOW"
FROM DUAL;



NOW
----------------------------------------------------------------------------------
Fri, IV  , 19, TWENTY NINETEEN AD, 109 Day of the year , 54236 Seconds past midnight

另请注意,第三个格式元素必须是 DD(您有 D,它不会为您提供月份的两位数日期,在本例中为 19)。

进一步说明你得到的错误:这是写在 Oracle 文档中的

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/Format-Models.html#GUID-49B32A81-0904-433E-B7FE-51606672183A

The total length of a datetime format model cannot exceed 22 characters.

但是,快速计数显示我的解决方案中格式模型的长度实际上超过了 22 个字符。 Oracle 文档完全错误的情况并不少见。在这种情况下,格式模型的长度似乎有限制,即使它不是文档中的那个...