oracle 自定义函数(将有效数字字符串排序后返回)
时间:2011-12-01
来源:互联网
小妹不甚感激!
作者: pingsuccess 发布时间: 2011-12-01
具体代码不写了,给你一个思路
1.将传入的字符串转换成数字(使用,to_number()函数)
2.然后将数字拆分成一个个独立的数字,存入数组中
3.进行排序(很多排序算法)
4.将排好序的数字从数组中取出,连接成字符串,返回。
作者: LuiseRADL 发布时间: 2011-12-01
传入的是字符串,返回也是字符串?
具体代码不写了,给你一个思路
1.将传入的字符串转换成数字(使用,to_number()函数)
2.然后将数字拆分成一个个独立的数字,存入数组中
3.进行排序(很多排序算法)
4.将排好序的数字从数组中取出,连接成字符串,返回。
是啊,传入的是有效数字的字符串(不确定几个数字,格式例如:3,5,4,1),然后返回1,3,4,5,
能有具体的代码吗?没有写过这样的,不知道具体该怎么实现呢?因为我是oracle一个新手啊!!!
作者: pingsuccess 发布时间: 2011-12-01
如题,在oracle中,怎样将一组有效的数字字符串,例如(3,5,4,1),将它排序后返回1,3,4,5,请各位帮
可以新创建一张临时表tmp_table ,一个字段tmp_value,类型为number(4),在存储过程中,把传进来的3, 5, 4,1都insert 到临时表中,然后再将执行select * from tmp_table order by tmp_value后的结果输出出来就行了。。呵呵。
作者: yixilan 发布时间: 2011-12-01
SQL code
CREATE OR REPLACE FUNCTION f_PaiXu(OldStr VarChar2) RETURN VarChar2 AS TmpStr VarChar2(4000); NewStr VarChar2(4000); WordCount Number(4); BEGIN -- 如果参数为空,则返回空 If OldStr Is Null Then RETURN Null; End If; -- 初始化待处理字符串 TmpStr := OldStr||','; -- 计算字符串中有几个数字 WordCount := LENGTH(TmpStr) - LENGTH(REPLACE(TmpStr,',')); -- 将排序后的数字重新拼接成字符串 SELECT WM_CONCAT(X) INTO NewStr FROM -- 将分解出来的数字排序 (SELECT A.X FROM -- 将字符串分解为数字(列转行) (SELECT to_number(regexp_substr(TmpStr,'[0-9]+',1,LEVEL)) X FROM DUAL CONNECT BY LEVEL <= WordCount ) A ORDER BY A.X); RETURN NewStr; END f_PaiXu;
作者: xiaobn_cn 发布时间: 2011-12-01
SQL code
CREATE OR REPLACE TYPE mytable AS TABLE OF varchar2(500);
2.创建函数
SQL code
CREATE OR REPLACE FUNCTION SEND_SPLIT(src VARCHAR2, delimiter varchar2) RETURN mytable IS psrc VARCHAR2(500); a mytable := mytable(); i NUMBER := 1; j NUMBER := 1; BEGIN psrc := RTrim(LTrim(src, delimiter), delimiter); LOOP i := InStr(psrc, delimiter, j); --Dbms_Output.put_line(i); IF i > 0 THEN a.extend; a(a.Count) := Trim(SubStr(psrc, j, i - j)); j := i + 1; --Dbms_Output.put_line(a(a.Count-1)); END IF; EXIT WHEN i = 0; END LOOP; IF j <= Length(psrc) THEN a.extend; a(a.Count) := Trim(SubStr(psrc, j, Length(psrc) + 1 - j)); END IF; RETURN a; END;
3.输出测试
SQL code
select wm_concat(col) from ( SELECT column_value as col FROM TABLE(CAST(SEND_SPLIT('1,9,5,6', ',')AS mytable)) order by column_value asc)这个wm_concat ,oracle10g 才有
作者: programmerxiaocai 发布时间: 2011-12-01
--不需要函数 写个sql就可以了。 ----T1 代表你的字符串存储的表 ----A 是字段 [TEST@myoracle] SQL>WITH T1 AS( 2 SELECT '3,5,4,1' A FROM dual UNION ALL 3 SELECT '13,5,44,17' A FROM dual UNION ALL 4 SELECT '73,54,14,51' A FROM dual UNION ALL 5 SELECT '312,534,544,61' A FROM dual 6 )SELECT WM_CONCAT(ANS) ANS 7 FROM (SELECT A, TO_NUMBER(REGEXP_SUBSTR(T1.A, '[^,]+', 1, L)) ANS 8 FROM T1, (SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 100) T2 9 WHERE LENGTH(T1.A) - LENGTH(REPLACE(T1.A, ',', '')) >= L - 1 10 ORDER BY A, ANS) 11 GROUP BY A; ANS -------------------------------------------------------------------------------- 5,13,17,44 1,3,4,5 61,534,544,312 14,54,73,51
作者: BenChiM888 发布时间: 2011-12-01
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28