繁体   English   中英

如何修复Oracle中SQL中的“ ORA-01801:日期格式对于内部缓冲区而言太长”错误

[英]How to fix “ORA-01801: date format is too long for internal buffer” error in SQL in Oracle

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

星期几,首字母大写,罗马数字(大写)中的月号,月日,大写字母中用anno domini拼写的年份,朱利安历法中的每年的日期用短语“一年中的某天”,午夜之后的秒数,短语“午夜之后的秒数”

我已达到午夜之后的实际秒数,但似乎无法在其中添加“午夜之后的秒数”。

我已经在网上寻找语法,但没有找到我真正需要的语法。 我的搜索查询的措词可能不正确,或者看起来不够好。 我的课本对此也不是很清楚。 我唯一看到的是对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

日期时间格式模型的总长度不能超过22个字符。

但是,快速计数表明,我的解决方案中格式模型的长度实际上超过22个字符。 Oracle文档经常会犯错误。 在这种情况下,格式模型的长度似乎受到限制,即使不是文档中的格式模型也是如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM