Oracle数据库执行查询语句报错:无效数字。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle数据库执行查询语句报错:无效数字。相关的知识,希望对你有一定的参考价值。

select s.xtmc,
t.access_ip,
to_number(to_char(t.access_time,'yyyy-MM-dd hh24:mm:ss')) access_time,
t.userid
from
sso_access_log t,
sso_db_order s
where t.userid = 'EIPUSER9969'and
t.sysid = s.id
order by access_time desc

where t.userid = 'EIPUSER9969' 这句有问题 估计t.userid是数值型的 'EIPUSER9969'转换不成数值型,所以报无效数字。 参考技术A to_number(to_char(t.access_time,'yyyy-MM-dd hh24:mm:ss')) access_time,
这句话出错.
原因
假如 t.access_time = 2011年10月10日 10:00:00
那么
to_char(t.access_time,'yyyy-MM-dd hh24:mm:ss')
的结果 = 2011-10-10 10:00:00

然后你想
to_number ( '2011-10-10 10:00:00' ) 自然是要报错了。追问

select s.xtmc,
t.access_ip,
to_char(t.access_time,'yyyy-MM-dd hh24:mm:ss') access_time,
t.userid
from
sso_access_log t,
sso_db_order s
where t.userid = 'EIPUSER9969'and
t.sysid = s.id
order by access_time desc
这样也报无效数字的。

追答

要不用一下 排除法
select s.xtmc,
t.access_ip,
t.access_time,
t.userid
from
sso_access_log t,
sso_db_order s
where t.userid = 'EIPUSER9969'
and t.sysid = s.id
order by access_time desc

看看这样出错么?

如果不出错, 那么说明问题出在 to_char 那里, 你需要进一步核对 access_time 的数据类型.

如果出错了, 那么说明问题和 to_char 无关。需要进一步调查。

本回答被提问者采纳
参考技术B to_number(to_char(t.access_time,'yyyy-MM-dd hh24:mm:ss')) access_time,
改为to_char(t.access_time,'yyyy-MM-dd hh24:mm:ss') as access_time,
不知道你又搞成to_number干什么追问

select s.xtmc,
t.access_ip,
to_char(t.access_time,'yyyy-MM-dd hh24:mm:ss') access_time ,
t.userid
from sso_access_log t
left join sso_db_order s
on t.sysid = s.id
where t.userid = 'EIPUSER9969'
order by access_time desc

参考技术C _number(to_char(t.access_time,'yyyy-MM-dd hh24:mm:ss')) access_time,

以上是关于Oracle数据库执行查询语句报错:无效数字。的主要内容,如果未能解决你的问题,请参考以下文章

Oracle报错ORA-01722: 无效数字排查解决方案

什么是“oracle ORA-01722”无效数字?

SQL中,使用NVL函数,报错:ora-01722:无效数字

oracle存储过程中执行查询sql语句报错

Oracle不同版本执行相同SQL语句,结果不一样,请大神赐教

Oracle查询语句中重命名的列在WHERE中无效?