当前位置:  数据库>oracle

Oracle字符串截取和拼接应用

    来源: 互联网  发布时间:2017-06-15

    本文导语: 今天有人问了个关于Oracle字符串截取和拼接的问题,让我帮他写出SQL,看了下问题描述还比较清晰就试着解决下,利用午休时间把功能实现了,问题看似不难,但思路一定要清晰,不然就乱了,关键大量应用了Oracle的substr 和instr...

今天有人问了个关于Oracle字符串截取和拼接的问题,让我帮他写出SQL,看了下问题描述还比较清晰就试着解决下,利用午休时间把功能实现了,问题看似不难,但思路一定要清晰,不然就乱了,关键大量应用了Oracle的substr 和instr函数。下面贴出问题和脚本:
问题:sql中一个字段值为:1788987565327、768374872394903、21437238740213483874629、23412341234252345。其中顿号间隔的每一组数字位数和尾数不定,现在要使前面这个字段值中顿号前的数字尾数即7、3、9、5都分别加1,变成8、4、0、6输出成1788987565328、768374872394904、21437238740213483874620、23412341234252346。注意其中第三个数,从9加1后,输出成0,而不是10

脚本:
declare
    targetstr varchar2(2000);
    strlength number;
    position number;
    maxposition number;
    retrunstr varchar2(2000);
    tempstr varchar2(2000);
    endstr number;
begin
    targetstr := '1788987565327、768374872394903、21437238740213483874629、23412341234252345';
    maxposition := 0;
    select LENGTH(targetstr) into strlength  from dual;
    for i in 1..strlength loop
        select instr(str,'、',1,i) into position from (select targetstr as str from dual);
        --dbms_output.PUT_LINE(position);
        if position > 0 then
            if maxposition = 0 then
                select substr(str,0,instr(str,'、',1,1)-1) into retrunstr from (select targetstr as str from dual);
                select TO_NUMBER(substr(restr,-1)) into endstr from (select retrunstr as restr from dual);
                if endstr = 3 or endstr = 5 or endstr = 7 then
                    endstr := endstr + 1;
                elsif endstr = 9 then
                    endstr := 0;
                end if;
                select substr(str,0,instr(str,'、',1,1)-2)||TO_CHAR(endstr) into retrunstr from (select targetstr as str from dual);
            elsif maxposition < position then
                select substr(str,instr(str,'、',1,i-1)+1,instr(str,'、',1,i)-instr(str,'、',1,i-1)-1) into tempstr from (select targetstr as str from dual);
                select TO_NUMBER(substr(restr,-1)) into endstr from (select tempstr as restr from dual);
                if endstr = 3 or endstr = 5 or endstr = 7 then
                    endstr := endstr + 1;
                elsif endstr = 9 then
                    endstr := 0;
                end if;
                select substr(str,1,length(str)-1) ||TO_CHAR(endstr) into tempstr from (select tempstr as str from dual);
                retrunstr := retrunstr || '、'|| tempstr;             
            end if;
            maxposition := position;
        else
            if maxposition > position then
                --特别处理最后一段
                tempstr := '';
                select substr(str,maxposition-length(str)) into tempstr from (select targetstr as str from dual);
                select TO_NUMBER(substr(restr,-1)) into endstr from (select tempstr as restr from dual);
                if endstr = 3 or endstr = 5 or endstr = 7 then
                    endstr := endstr + 1;
                elsif endstr = 9 then
                    endstr := 0;
                end if;
                select substr(str,1,length(str)-1) ||TO_CHAR(endstr) into tempstr from (select tempstr as str from dual);
                retrunstr := retrunstr || '、'|| tempstr;
            end if;
            exit;
        end if;
    end loop;
    dbms_output.PUT_LINE(retrunstr);
end;

运行结果如下:
原字符串:1788987565327、768374872394903、21437238740213483874629、23412341234252345
14:03:38  **** SCRIPT STARTED: 02-Apr-2015 14:03:38 ****
14:03:38  declare
14:03:38      targetstr varchar2(2000);
14:03:38  ...
14:03:39  PL/SQL block executed

14:03:39  **** SCRIPT ENDED 02-Apr-2015 14:03:39 ****
14:03:39  End Script Execution


    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle中SQL语句连接字符串的符号使用介绍
  • Oracle中字符串连接的实现方法
  • 快疯了:怎样从JSP中向Oracle_816中插入LONG型字符串?
  • 向Oracle数据库的CLOB属性插入数据报字符串过长错误
  • oracle使用instr或like方法判断是否包含字符串
  • 我要向oracle中插入大文本,用的是lang类型的字段,但是只能插3000字,再多就抱错,说我字符串过长。谁遇到过此问题?
  • (oracle)如何解决这个很长的sql字符串:(怎样让他转行?)
  • Oracle 函数大全[字符串函数,数学函数,日期函数]第1/4页
  • 怎样用oracle保存长字符串(4、5千字左右),并用jsp取出?在线给分
  • oracle 字符串转成行
  • 深入分析C#连接Oracle数据库的连接字符串详解
  • Oracle 存储过程总结 二、字符串处理相关函数
  • Oracle 多行记录合并/连接/聚合字符串的几种方法
  • ORACLE常用数值函数、转换函数、字符串函数
  • Oracle to_char 日期转换字符串语句分享
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3