当前位置:   article > 正文

plsql oracle 函数regexp_replace字符的处理案例_regexp_replace \d

regexp_replace \d

先吐槽一波,现在开发一个使用中的后台,其中有多个金额字段的类型是varchar2,并且里面有非数字字段,导致我累加的时候会报错. 
并且没有很好的办法解决,为什么其他办法不好解决先不谈.我准备写一个oracle函数,来解决问题. 
需求很简单,伪代码写下来

  1. public Number myNanvl(String str, Number defaultValue){
  2. //如果是数字 返回本身数字
  3. if(isNum(str){
  4. return to_number(str);
  5. }
  6. //如果不是数字,返回默认值
  7. return defaultValue;
  8. }

oracle并没有找到合适的isNum函数,所以用

regexp_replace(str,'^[-\+]?\d+(\.\d+)?$','') IS NOT NULL

替代一下. 
最终代码是这样的

  1. CREATE OR REPLACE
  2. FUNCTION "myNanvl"(str VARCHAR2, defaultValue NUMBER) RETURN NUMBER
  3. AS
  4. BEGIN
  5. IF regexp_replace(str,'^[-\+]?\d+(\.\d+)?$','') IS NOT NULL THEN
  6. return defaultValue;
  7. END IF;
  8. RETURN "TO_NUMBER"(str);
  9. END;

测试结果

  1. select "myNanvl"('12.12.12', 0) from dual
  2. --返回0
  3. select "myNanvl"('NaN', 0) from dual
  4. --返回0
  5. select "myNanvl"('NaN', 100) from dual
  6. --返回100
  7. select "myNanvl"('123', 0) from dual
  8. --返回123

关于regexp_replace(); 
其实if后面的条件是可以抽象一下的,懒得搞了,目前必要性也不大. 
完了确实没很好的方法判断字符是不是数字的,就这个正则还是灰常准确的,所以就用他咯

下面就开始笔记了哈, 
创建函数的语法 
[]内为可选语法 
| 为多选一

  1. 创建自定义函数的语法
  2. CREATE [OR REPLACE]
  3. FUNCTION "函数名"[(形参组)] RETURN 返回值类型
  4. AS|IS
  5. BEGIN
  6. -- 函数体
  7. RETURN NULL;
  8. END;
  9. --其中形参组的语法是 形参名 IN|OUT|空 类型
  10. CREATE FUNCTION myFunction(str IN VARCHAR2, num OUT NUMBER, c char)
  11. ...

if语句 
condition代表一个条件 
–1.语法 (IF-THEN) 
Oracle/PLSQL中IF-THEN的语法是:

  1. IF condition THEN
  2. {...statements to execute when condition is TRUE...}
  3. END IF;

–2.Syntax (IF-THEN-ELSE) 
Oracle/PLSQL中IF-THEN-ELSE的语法是:

  1. IF condition THEN
  2. {...statements to execute when condition is TRUE...}
  3. ELSE
  4. {...statements to execute when condition is FALSE...}
  5. END IF;

–3语法 (IF-THEN-ELSIF
敲黑板,这里要考的,是ELSIF 
Oracle/PLSQL中IF-THEN-ELSIF的语法是:

  1. IF condition1 THEN
  2. {...statements to execute when condition1 is TRUE...}
  3. ELSIF condition2 THEN
  4. {...statements to execute when condition2 is TRUE...}
  5. ELSE
  6. {...statements to execute when both condition1 and condition2 are FALSE...}
  7. END IF;
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/230945
推荐阅读
相关标签
  

闽ICP备14008679号