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数据库执行查询语句报错:无效数字。的主要内容,如果未能解决你的问题,请参考以下文章