今天在数据库里做数据运算时(数据都为0以上),发现报无效数字,之前也是经常遇到这种错误,一直没有做过整理;
解决办法:
1.查出非数据的字段,但是没查到
SELECT * from 表 WHERE replace(表字段,'0123456789.','') IS NULL;
2.将空格清除掉(换行,制表符,空格)
update 表 set 表字段 = regexp_replace(表字段,'\S','');
再对空字段做转换,问题已经解决
select decode(nvl(字段,0),0,0,字段/10) from dual
ps:
另外写了个函数,方便以后查看空格具体是什么字符
--sql查看
SELECT REPLACE(
REPLACE(
REPLACE(
REPLACE (' 这 个 是数据字段',chr(9),'制表符'),
CHR(10),'换行符'),
CHR(13),'回车'),
CHR(32),'空格') from dual;
create or replace function viewchr(str in VARCHAR2) return varchar2 IS
--显示表里的空格
Result varchar2(400);
BEGIN
SELECT
REPLACE(
REPLACE(
REPLACE(
REPLACE (str,chr(9),'制表符'),
CHR(10),'换行符'),
CHR(13),'回车'),
CHR(32),'空格') INTO Result
from soldier_a;
return(Result);
end viewchr;