ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

神奇ORA-01722無效的數字

2022-09-06 16:04:17  阅读:167  来源: 互联网

标签:00 monkey 無效 test DATE ORA SPEED 數字 SCR


开发反馈,在查询一个表的时候,查询的栏位里面明明没有非数字的字符串,但是在使用TO_NUMBER时,会报错ORA-01722: 無效的數字

开发sql:

SELECT SCR_SPEED
          FROM monkey.monkey_test
         WHERE ADD_DATE >=
                  TO_DATE ('2022/08/01 07:00:00', 'yyyy/MM/dd hh24:mi:ss') and to_number(SCR_SPEED) > 0;     

报错,无效的数字

排查1:

SELECT TO_NUMBER(SCR_SPEED)
          FROM monkey.monkey_test
         WHERE ADD_DATE >=
                  TO_DATE ('2022/08/01 07:00:00', 'yyyy/MM/dd hh24:mi:ss');

不报错,这时候就很奇怪了,明明可以TO_NUMBER,但为啥开发会报错呢

排查2:

WITH tt
     AS (SELECT TO_NUMBER (SCR_SPEED) SCR_SPEED
           FROM MONKEY.monkey_test
          WHERE ADD_DATE >=
                   TO_DATE ('2022/08/01 07:00:00', 'yyyy/MM/dd hh24:mi:ss'))
SELECT *
  FROM tt
 WHERE tt.SCR_SPEED > 0;

还是报错,我把可以跑的部分抽出来,再跑还是不行

排查3:

CREATE TABLE monkey.test
AS
   SELECT TO_NUMBER (SCR_SPEED) SCR_SPEED
     FROM MONKEY.monkey_test
    WHERE ADD_DATE >=
             TO_DATE ('2022/08/01 07:00:00', 'yyyy/MM/dd hh24:mi:ss');

select * from monkey.test where scr_speed >0;

不再报错,说明在这个时间范围里面确实没有非数字的字符串

经过对比,发现to_number只有在where条件里面的时候会报错,此时,猜测作为where条件的时候,需要去整个表里面筛选记录,虽然在时间段内没有非数字的字符串,但是整个表里面有,用如下sql验证

SELECT *  FROM monkey.monkey_test where  length(REGEXP_REPLACE(SCR_SPEED,'[^0-9]','wocao'))>3

发现确实有一笔时开发测试的记录,SCR_SPEED的值为test,通知开发删除后,执行正常。

标签:00,monkey,無效,test,DATE,ORA,SPEED,數字,SCR
来源: https://www.cnblogs.com/monkey6/p/16662076.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有