例子:

一个字符串"11,15,13,17,12",以逗号分割,现在要排序成"11,12,13,15,17"。

写了一个实现方法,记录下来以备后用:

--------------------------------------------------------
-- Export file for user BEN --
-- Created by Administrator on 2015/8/5 星期三, 10:24:20 --
-------------------------------------------------------- set define off
spool get_bubble.log prompt
prompt Creating function GET_BUBBLE
prompt ============================
prompt
create or replace function Get_BUBBLE
(
av_str varchar2, --要分割的字符串
av_split varchar2 --分隔符号 )
return varchar2
is
lv_str varchar2(1024);
str varchar2(1024);
str1 varchar2(1024); --进行交换的第一个子串
str2 varchar2(1024); --进行交换的第二个子串
temp varchar2(1024); --临时交换中间空间
new_str varchar2(1024); --内层循环每次交换的最大值
all_str varchar2(1024); --保存每次循环后生成的新串
end_str varchar2(1024); --最终值,返回值
lv_length number; --分割后的子串个数
jflag char(1); --每次外循环后首次内循环的标识
i number := 0; --外循环控制
j NUMBER := 0; --内循环控制
x number; --首次内循环第一个子串截取位置
k number; --首次内循环第二个子串截取位置
y number;
z number; --非首次内循环子串截取的位置
begin
lv_str := ltrim(rtrim(av_str)); --去前后空格
str := lv_str;
lv_length := 0;
----分割串【得到子串个数】
while instr(str,av_split)<>0 loop
lv_length:=lv_length+1;
str:=substr(str,instr(str,av_split)+length(av_split),length(str));
end loop;
lv_length:=lv_length+1;
if lv_length <= 1 then
return '分割后只有一个子串';
end if;
------------------------------------------------
end_str := '';
<<loop1>>
loop --外循环
if i < lv_length then
j := i+1;
jflag := 0;
new_str := '';
all_str := '';
<<loop2>>
loop --内循环
if j < lv_length then
if jflag = 0 then -- 首次内循环(方便处理子串的拼接问题)
select instr(lv_str, av_split, 1) into x from dual;
str1 := substr(lv_str, 1, x-1);
--decode处理最后一个子串截取位置为0的问题
select decode(instr(lv_str, av_split, x+length(av_split)),0,length(lv_str)+1,instr(lv_str, av_split, x+length(av_split))) into k from dual;
str2 := substr(lv_str, x+length(av_split), k-x-length(av_split));
select count(*) into y from dual where str1 > str2;
if y > 0 then
new_str := str1;
temp := str1;
str1 := str2;
str2 := temp;
else
new_str := str2;
end if;
all_str := str1;
jflag := 1;
else --非首次
str1 := new_str; --上次比较后的最大值作为这次比较的前一个值
select decode(instr(lv_str, av_split, k+length(av_split)),0,length(lv_str)+1,instr(lv_str, av_split, k+length(av_split))) into z from dual;
str2 := substr(lv_str, k+length(av_split), z-k-length(av_split)); --第二个
k := z; -- z赋给k,方便下一次截取str2
select count(*) into y from dual where str1 > str2;
if y > 0 then
new_str := str1;
temp := str1;
str1 := str2;
str2 := temp;
else
new_str := str2;
end if;
all_str := all_str||av_split||str1;
end if;
end if;
j := j+1;
exit loop2 when j >= lv_length; end loop loop2;
lv_str := all_str||av_split||new_str; --上一轮内循环生成的新串 if end_str is null then --最终的子串处理
end_str := new_str;
else
end_str := new_str||av_split||end_str;
end if; end if;
i := i+1;
exit when i >= lv_length-1;
end loop loop1;
end_str := str1||av_split||end_str; --返回前拼接上最后一个值 return end_str;
end Get_BUBBLE;
/ spool off

Oracle 字符串分割排序冒泡算法的更多相关文章

  1. 工作中用到的oracle字符串分割整理

    oracle部分: 定义类型(用于字符串分割): create or replace TYPE "STR_SPLIT" IS TABLE OF VARCHAR2 (4000); 字 ...

  2. Oracle字符串分割函数

    今天在创建视图的时候,碰到一个问题,问题如下: 将字符格式为“XXX,YYY”分割出来,并且分割后作为两个字段放入视图中. 考虑使用字符分割函数,但是查找资料Oracle没有字符分割的函数(我对Ora ...

  3. oracle 字符串分割

    ); create or replace function strsplit2(p_value varchar2, p_split varchar2 := ',') return str_split ...

  4. oracle 字符串分割函数

    首先创建一个类型: CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000); 创建函数: CREATE OR REPLACE FUNC ...

  5. Oracle字符串分割Split(超简单一条sql解决)

    ) FROM renyuan where name ='张三' 解决如下问题 我现在有一个字段是存:,,3的,而它对应另一张值集表中.eg; 课程人员表 renyuan id name Course ...

  6. Oracle拆分字符串,字符串分割的函数。

    第一种:oracle字符串分割和提取 分割 create or replace function Get_StrArrayLength ( av_str varchar2, --要分割的字符串 av_ ...

  7. Oracle 超长字符串分割劈分

    Oracle 超长字符串分割劈分,具体能有多长没测过,反正很大.... 下面,,,,直奔主题了: CREATE OR REPLACE FUNCTION splitstr(p_string IN clo ...

  8. 冒泡算法给0~9随机n位数字排序

    <?php //产生5位0~9的随机数      function getRand($begin=0,$end=9,$limit=5){                $rand_array=r ...

  9. python 数据结构与算法之排序(冒泡,选择,插入)

    目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习 ...

随机推荐

  1. mac上mysql乱码问题解决

    一.mysql出现乱码问题: 出现的问题是下图这样的乱码问题,我是使用java在做练习的时候发现出现字符集编码问题的: 当时是使用jdbc来添加的数据,我的jdbc包括web前端后端的编码都是设置的是 ...

  2. [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  3. 15. 星际争霸之php设计模式--策略模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  4. ios项目总结一:开发中常用的设计模式

    一.单例设计模式 1.应用场景: 程序运行期间,在内存中只有一个实例存在,主要用于资源共享,对硬件的访问等等 2.优点: 跨模块,解耦合,使用简单 3.敏捷原则: 单一职责原则 4.SDK实例: UI ...

  5. wex5 教程 之 图文讲解 后台管理界面设计与技巧

    视频教程地址:http://v.youku.com/v_show/id_XMTgwOTAyMTkyMA==.html?from=s1.8-1-1.2&spm=a2h0k.8191407.0.0 ...

  6. Oracle数据库DOC命令导入导出(2014-3-10记)

    导出:exp lwj/lwj123456@orcl file=d:/db.dmp full=y 导入:imp lwj/lwj123456@orcl file=d:/db.dmp full=y 注:用户 ...

  7. 一个平台BUG,好吧,找到了一个新的办法,同样的效果

    问题的来源,我是看到别人这么做,我只是看到了这个程序运行的视频,具体是当你选择通信方式时1  COM ,  2  网口:要求在combobox中选择,selectindex为0时显示COM的选项,为1 ...

  8. 2016年12月18日 星期日 --出埃及记 Exodus 21:13

    2016年12月18日 星期日 --出埃及记 Exodus 21:13 However, if he does not do it intentionally, but God lets it hap ...

  9. MVC 中aspx的增删改查

    先看总体结构 LInQ #pragma warning disable 1591 //--------------------------------------------------------- ...

  10. 基于Node的PetShop,oauth2认证RESTful API

    前篇 - 基本认证,用户名密码 后篇 - OAuth2 认证 前文使用包passport实现了一个简单的用户名.密码认证.本文改用oauth2来实现更加安全的认证.全部代码在这里. OAUTH2 用户 ...