oracle – 获取错误 – ORA-01858:找到了一个非数字字符,其中包含数字

发布时间:2020-07-27 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了oracle – 获取错误 – ORA-01858:找到了一个非数字字符,其中包含数字脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在下面的sql中收到错误:

ORA-01858: a non-numeric character was found where a numeric was expected

SELECT   c.contract_num,CASE
            WHEN   (  MAX (TO_CHAR (TO_DATE (c.event_dt,'YYYY-MM-DD'),'MMDD'))
                    - MIN (TO_CHAR (TO_DATE (c.event_dt,'MMDD')))
                 / COUNT (c.event_occurrence) < 32
            THEN
              'Monthly'
            WHEN       (  MAX (
                            TO_CHAR (TO_DATE (c.event_dt,'MMDD'))
                        - MIN (
                            TO_CHAR (TO_DATE (c.event_dt,'MMDD')))
                     / COUNT (c.event_occurrence) >= 32
                 AND   (  MAX (
                            TO_CHAR (TO_DATE (c.event_dt,'MMDD')))
                     / COUNT (c.event_occurrence) < 91
            THEN
              'Quarterley'
            ELSE
              'Yearly'
         END
FROM     ps_ca_bp_events c
GROUP BY c.contract_num;
您得到的错误要么是因为您在已经是日期的列上执行TO_DATE,并且您使用的格式掩码与您的nls_date_format参数[1]不同,或者因为event_occurrence列包含的数据不是数.

您需要a)更正您的查询,以便它不在日期列上使用TO_DATE,并且b)更正您的数据,如果event_occurrence应该只是数字.

并修复该列的数据类型以确保您只能存储数字.

[1] Oracle执行的操作:TO_DATE(date_column,non_default_format_mask)是:
TO_DATE(TO_CHAR(date_column,nls_date_format),non_default_format_mask)

通常,默认的nls_date_format参数设置为dd-MON-yy,因此在您的查询中,可能发生的事情是您的日期列被转换为dd-MON-yy格式的字符串,然后您将转向它使用MMDD格式返回日期.字符串不是这种格式,因此您会收到错误.

总结

以上是脚本之家为你收集整理的oracle – 获取错误 – ORA-01858:找到了一个非数字字符,其中包含数字全部内容,希望文章能够帮你解决oracle – 获取错误 – ORA-01858:找到了一个非数字字符,其中包含数字所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入脚本之家官方QQ群:1065694478
脚本之家官方公众号

微信公众号搜索 “ 程序精选 ” ,选择关注!

微信公众号搜索 “ 程序精选 ”
精选程序员所需精品干货内容!