数据库设计时把某一列数据类型设置为varchar,现在表中的这一列数据有的录入了字符,有的录入了数字,现在相对数字进行数学运算,但是直接不加限制的运算的话Oracle会直接报错。请问,用什么操作可以对这一列中的数字进行数学运算而不报错呢,当然也不能影响其他非数值数据的内容
我的方案:1. 增加列:isdigit2. 写一个存储过程或者plsql块,循环每行,尝试转换为数字(to_number),如果转换成功,则isdigit=1,如果触发异常,则为03. 写一个触发器,对于新增数据,修改数据,则尝试转换为数字,如果转换成功,则isdigit=1,如果触发异常,则为04. 对数据进行计算时,增加条件 isdigit=1即可。
首先判断是否数字串,用正则式如: regexp_like('1234', '^[[:digit:]]+$'); 选出数字串然后字符转为数字 to_number() 进行数学运算或者用 translate trim(TRANSLATE(str, '1234567890', '')), 为空的话则是数字串,再用to_number()