ORA-01722:子查询上的数字无效

问题描述 投票:0回答:1

[嗨,我正在尝试执行查询,但不幸的是,提示我ORA-01722错误:无效数字

SELECT L.NEVENTLOGIDN, LPAD (nuserid, 6, '0') nuserid, u.susername, 
  TO_CHAR (TO_DATE ('1970-01-01 00:00:00', 'YYYY-MM-DD HH24:MI:SS') + ( (ndatetime) / (60 * 60 * 24)), 'YYYY-MM-DD HH24:MI:SS') 
  date_time, l.nreaderidn, r.sname, 
  CASE WHEN l.nreaderidn IN (SELECT GETREADERSBYFUNC('OUT', 'LOCKER') devices FROM dual ) THEN 'O' 
  WHEN l.nreaderidn IN (SELECT GETREADERSBYFUNC('IN', 'LOCKER') devices FROM dual ) THEN 'I' END logtype 
  FROM TB_EVENT_LOG l, TB_READER r, TB_USER u 
  WHERE 
  l.nreaderidn IN ( SELECT GETREADERSBYDESC('LOCKER') devices FROM dual) 
  AND NDATETIME >= ((TO_DATE ('2020-01-27' || ' 12:00:00 AM', 'YYYY-MM-DD HH:MI:SS AM') ) - TO_DATE ('1970-01-01 12:00:00 AM', 'YYYY-MM-DD HH:MI:SS AM')) * 24 * 60 * 60 
  AND ndatetime <= ((TO_DATE ('2020-01-28' || ' 12:00:00 PM', 'YYYY-MM-DD HH:MI:SS PM') ) - TO_DATE ('1970-01-01 12:00:00 AM', 'YYYY-MM-DD HH:MI:SS AM')) * 24 * 60 * 60 
  AND l.nuserid = u.suserid 
  AND l.nreaderidn = r.nreaderidn 
  ORDER BY 2, 4

我认为原因是此3。

1

CASE WHEN l.nreaderidn IN (SELECT GETREADERSBYFUNC('OUT', 'LOCKER') devices FROM dual ) THEN 'O'

2

  WHEN l.nreaderidn IN (SELECT GETREADERSBYFUNC('IN', 'LOCKER') devices FROM dual ) THEN 'I' END logtype

3

WHERE 
  l.nreaderidn IN ( SELECT GETREADERSBYDESC('LOCKER') devices FROM dual) 

因为nreaderidn是一个数字类型,但是当我把它的结果放在下面时,它就可以工作了>>

WHERE 
  l.nreaderidn IN ( '544381428','544381436','544381433','544381424','544381043')

我不允许更改nreaderidn的数据类型和修改oracle函数。有办法解决吗?我希望你明白我的意思。预先谢谢你

[嗨,我正在尝试执行查询,但不幸的是,我收到ORA-01722错误:无效的数字SELECT L.NEVENTLOGIDN,LPAD(nuserid,6,'0')nuserid,u.susername,TO_CHAR(TO_DATE(' 1970-01 -...

sql oracle oracle11g
1个回答
0
投票

您可以使用cast将函数的输出转换为数字:

© www.soinside.com 2019 - 2024. All rights reserved.