Oracle ORA-01722:无效的数字,但数据类型为date,它不会以任何方式接受它

Oracle ORA-01722:无效的数字,但数据类型为date,它不会以任何方式接受它,oracle,Oracle,还有一个问题,就是不能搞清楚 我的问题是: 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 codel

还有一个问题,就是不能搞清楚

我的问题是:

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:无效号码 172200000-“无效号码” *原因:指定的数字无效。 *操作:指定一个有效的数字

我试过在其他几个专栏上订购,但都是同一个问题。 如果我简化查询,它可以正常工作:

select s.user_id,s.date_time
from ARISG_PROD.system_admin_audit_session s
order by 2 desc

那么为什么它不承认我的datetime为date并接受订单呢?

让我们看看我是否能在这里帮助您。 通常,将字符串与数字进行比较时可能会发生这种错误

例如,如果s.module_id是varchar2,t1.module_id被定义为一个数字,那么下面的语句

s.module_id = t1.module_id
可能是根本原因

我建议您注释掉主select语句中的所有子查询,并尝试查询是否发生错误


一旦错误消失,您就必须分析比较语句。或者将其发布到此处,我们将查看一下

如果
s.date\u time
已经是日期数据类型,请不要在其上使用
to\u date()
。这意味着Oracle需要执行到VARCHAR2的隐式转换,然后返回到最新版本。如果要删除日期列的时间部分,请改用
trunc()
。我还尝试将alias放在表的子查询上,但仍然不起作用。但是,我可以不使用解码部分,所以这很好。谢谢你的帮助。(我还是不太明白:o)我猜是这里的转换把事情搞砸了:t2.code=to_number(t.old_value))@kristian这里还有3个嫌疑犯:1)代码列表_id=5029;2) 语言代码=001;3) field\u id=t.field\u id试着与所有的4个人一起玩,只是一步一步地把他们注释掉。你会找到那个混蛋的!另外3个很好用,我只需要过滤掉2到0的数字转换。我可以在没有解码的情况下使用输出:)@kristian很高兴听到我的想法有帮助。