Oracle数据库中,如何对某一Varchar类型的列进行数学运算

数据库设计时把某一列数据类型设置为varchar,现在表中的这一列数据有的录入了字符,有的录入了数字,现在相对数字进行数学运算,但是直接不加限制的运算的话Oracle会直接报错。
请问,用什么操作可以对这一列中的数字进行数学运算而不报错呢,当然也不能影响其他非数值数据的内容

第1个回答  2012-06-04
我的方案:
1. 增加列:isdigit
2. 写一个存储过程或者plsql块,循环每行,尝试转换为数字(to_number),如果转换成功,则isdigit=1,如果触发异常,则为0
3. 写一个触发器,对于新增数据,修改数据,则尝试转换为数字,如果转换成功,则isdigit=1,如果触发异常,则为0
4. 对数据进行计算时,增加条件 isdigit=1即可。
第2个回答  2012-06-04
首先判断是否数字串,用正则式如: regexp_like('1234', '^[[:digit:]]+$'); 选出数字串

然后字符转为数字 to_number() 进行数学运算

或者用 translate
trim(TRANSLATE(str, '1234567890', '')), 为空的话则是数字串,再用to_number()本回答被网友采纳
第3个回答  2012-06-04
只取纯数字的记录
select * from table1 where regexp_like(字段,'^[[:digit:]]+$');
第4个回答  2012-06-04
相似回答