oracle学习笔记---写存储过程时可能用到的

本文介绍如何利用正则表达式和自定义函数实现字符串处理、中文字符提取、数字提取、多字符连接去重等操作,并通过实例展示在SQL中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、全角、半角互转:

      to_single_byte(c)转换成半角
      to_multi_byte(c)转换成全角


2、使用正则表达式去除非数字、中文字符自定义函数:

      create or replace function FN_REG_REPLACEOTHER(str1 varchar2) return  varchar2
      is
            t_str varchar2(300);
            begin
                --替换空格、,。,.等字符
                t_str:=regexp_replace(t_str,'[[:punct:]|[:blank:]|[:space:]|[:cntrl:]]','') ;
                return t_str;
      end FN_REG_REPLACEOTHER;


3、使用正则表达式去掉多字符连接时中间多个“,“号,如A,B,,C,D,E,,,, 去掉后结果为:A,B,C,D,E

     create or replace function FN_REG_REPLACE(str1 varchar2) return  varchar2
     is
      t_str varchar2(1000);
     begin
         t_str := REGEXP_REPLACE(str1, '(,){2,}',',');
         return REGEXP_REPLACE(t_str,'(^\,|\,$)','');
      end FN_REG_REPLACE;


4、只提取某一字段中的中文部分

     translate(字段名, '*0123456789','*')

    如:select translate('中国人123456是最棒的8899', '*0123456789','*') from dual ;

           结果:中国人是最棒的


5、只提取某一字段中的数字部分

    translate(字段名, '0'||translate(字段名, '*0123456789','*') ,'0')

   如:select translate('中国人123456是最棒的8899', '0'||translate('中国人123456是最棒的8899', '*0123456789','*') ,'0') from dual ;

          结果:1234568899

6、where子句中CASE妙用

      where  字段=(case when 1=1(你想加的条件)  then (你想取的值)end)

     说明:效果是如果没有你要的条件,相当于没有WHERE子句限制。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值