例子:

一个字符串"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. Idea 常用快捷键列表

    Idea 常用快捷键列表 Alt+回车 导入包,自动修正Ctrl+N 查找类Ctrl+Shift+N 查找文件Ctrl+Alt+L 格式化代码Ctrl+Alt+O 优化导入的类和包Alt+Insert ...

  2. 20145320《Java程序设计》第三次实验报告

    20145320<Java程序设计>第三次实验报告 北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1453 指导教师:娄嘉鹏 实验日期:2016.04.22 15: ...

  3. Unity Tidy Tile Pack #1

    https://www.assetstore.unity3d.com/cn/#!/content/3276 版本: 1.1 下载地址 密码:mt8a

  4. ExtJs Grid 删除,编辑,查看详细等超链接处理

    在网上查了好多资料,关于ExtJs处理操作栏的“删除”.“编辑”.“查看详细”的处理,原来项目都是这么处理: 操作栏:{ text:'操作', xtype:'actioncolumn', items ...

  5. 十四、Java基础---------String、StringBuffer、StringBuilder基本应用

    在前面的博客中曾提及Java的数据类型分为基本数据类型,和引用数据类型,而String便是最常见的应用数据类型,本文将着重介绍这一引用数据类型的用法. String 字符串     String类是对 ...

  6. How to use usercontrol - pass paramters

    在线PhotoShop http://uupoop.com/ In the previous chapter we created a UserControl, and now we will try ...

  7. LeetCode----66. Plus One(Java)

    package plusOne66; /* Given a non-negative number represented as an array of digits, plus one to the ...

  8. [课程设计]Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划)

    Scrum 3.1 多鱼点餐系统开发进度(第三阶段项目构思与任务规划) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到 ...

  9. Java 利用初学知识 写出自己的名字

  10. JSON上

    关于JSON部分: 目录: 一:定义二:实例三:JSON的语法 一:什么是JSON? 1.JSON:JavaScript 对象表示法(JavaScript Object Notation). 2.JS ...