oracle ORA-01722:数字无效,但数据类型为日期,并且无论如何都不会接受它

tquggr8v  于 2023-01-08  发布在  Oracle
关注(0)|答案(1)|浏览(260)

还有一个问题是不是数字,只是不能弄清楚。
我的疑问:

SELECT
    s.user_id,
    date_time, 
    to_char(Date_time, 'DD-MON-YYYY HH24:MI:SS') timestamp,
        ( SELECT DECODE
        FROM (  SELECT  DECODE, code
                FROM    codelist_decode
                WHERE   codelist_id = 5029
                AND language_code = 001
             ) t5
        WHERE  t5.code = s.operation_type) 
    AS operation,
        ( SELECT t1.module_name_internal
        FROM (  SELECT  module_name_internal, module_id
                FROM    aris_admin_module
              ) t1
        WHERE  s.module_id = t1.module_id
        ) 
    AS module,
    t.session_id,
    t.seq_admin_audit_trail,
    t.record_id,
        ( SELECT t4.field_name_e
          FROM (  SELECT  field_name_e, admin_field_id
                  FROM    aris_admin_table_field
                ) t4
          WHERE admin_field_id = t.field_id) 
    AS field_name,
        ( SELECT t2.DECODE
          FROM  (  SELECT  DECODE, code
                   FROM    aris_admin_audit_decode
                   WHERE   field_id = t.field_id
                ) t2
          WHERE  t2.code = to_number(t.old_value)) 
    AS org_value_yn,
    t.old_value,
        ( SELECT t3.DECODE
          FROM ( SELECT  DECODE, code
                 FROM    aris_admin_audit_decode
                 WHERE   field_id = t.field_id
                ) t3
          WHERE t3.code = to_number(t.new_value)) 
    AS new_value_yn
    ,t.new_value
FROM
    system_admin_audit_session   s,
    system_admin_audit_trail     t
WHERE s.session_id = t.session_id
--order by TO_NUMBER('s.session_id','9999999999')
--or order by to_date(s.date_time) 
order by 2

上述情况会生成错误:
ORA-01722:编号无效
01722. 00000-"无效号码"

  • 原因:指定的号码无效。
  • 操作:指定有效数字。
    我试过订购其他几个专栏,但问题是一样的。
    如果我简化查询,它就能正常工作:
select s.user_id,s.date_time
from ARISG_PROD.system_admin_audit_session s
order by 2 desc

那么,为什么它不承认我的日期时间为日期,并接受订单?

mzsu5hc0

mzsu5hc01#

让我们看看我能不能帮到你。通常,当一个字符串和一个数字比较时,会发生这样的错误。
例如,如果s.module_id是varchar2,t1.module_id定义为数字,则语句如下所示

s.module_id = t1.module_id

可能是根本原因。
我建议您注解掉主select语句中的所有子查询,然后尝试查询是否发生错误。
一旦错误消失了,你必须分析比较语句,或者把它贴在这里,我们会看到

相关问题