-
Oracle自定义函数解决数据类型转换出错的问题
昨天开发过程(使用Oracle 9i)中,写了一个查询某字段,某个数值范围内的记录的SQL语句
如:select * from table where memeber>1 and memeber<9
但是,由于种种原因,这个字段有的记录不是数字类型(有可能是多个内容公用一个字段造成的,也有可能是输入的时候没有限制好,输入了全角字符造成的),这样这个SQL语句就会报错。
![](https://images.cnblogs.com/cnblogs_com/stubman/QQ1.png)
一开始的解决方案是:通过比较字符串来代替比较数字
如:select * from table where memeber>'1' and memeber<'9 '
但是发现,这样会有一些问题,(举例说明,在字符串的比较中,9会比101大),所以,这个语句找出来的明细中,可以找到很多比9大的数值,甚至还有其他类型的记录:
此方案宣告失败。
最后用了个自己觉得还不错的方案:
在Oracle中写一个自定义函数
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
Code
1
create or replace function ToNumber(p in varchar2)
2
return number
3
is
4
test number;
5
begin
6
test := to_number(p);
7
return test;
8
exception
9
when OTHERS then
10
return 0;
11
end;
此函数的大概意思是:将传入的参数转换为数值类型,如果转换出现异常,则返回0;
通过这个函数,将非数值类型转换成了0,当然也可以根据需要转换成其他数值,然后这样写SQL语句:
select * from table where ToNumber(memeber)>1 and ToNumber(memeber)<9
大功告成,避免了SQL语句执行过程中报错,无法执行下去的问题,也排除了不在1,9范围之内的记录。
方法记录在此,方便记忆;
此文是搬家复制过来的。
-
相关阅读:
c#导出导出excel的两种方法
jsonp跨域访问
javascrip中部分函数总结
vue.js开发环境初步搭建、脚手架工具安装(node.js安装)
Java SE、Java EE、Java ME基本区别
Ubuntu10.04上apache2: bad user name ${APACHE_RUN_USER}问题解决
Ubuntu 下安装 webmin1.54
View的setOnClickListener的添加方法
android 耳机按钮
响应键盘事件
-
原文地址:https://www.cnblogs.com/stubman/p/1559006.html
Copyright © 2020-2023
润新知