首页 ┆ 网站地图 ┆ 在线留言 ┆ 游戏资讯 ┆ 资源下载 ┆ 端午节祝福 ┆ 迅雷在线影视
设为首页
加入收藏
联系我们
高级搜索
您当前的位置: 主页>数据库>ORACLE>oracle中分割字符串,并求最大值
oracle中分割字符串,并求最大值
来源: 发布时间:2008-03-12 发布人: 浏览: 人次   字体: [ ]  

今天公司做一个 oracle中的分割字符串,并求最大值,在C# 或其它语言中都会有一个类似于split的函数,而在oracle中是没有这样现成的,不过可以通过instr和substr组合实现类似于split的功能。

我来介绍一个我们的需求:有一个clog的字段,字段内容如“4.01,101.20;4.19,100.00;4.36,97.10;4.52,95.90;4.66,96.90;4.80,99.00;4.92,99.80;5.03,99.10;5.14,96.90;5.19,96.20;5.28,96.10;5.35,97.10;5.40,98.10;5.43,97.80;5.46,96.60;5.45,93.20;5.42,92.20;5.36,92.00;5.27,91.80;5.14,91.70;5.00,90.10;4.83,87.20;4.65,83.70;4.44,78.90;4.22,73.30;3.99,67.90;3.76,60.90;3.60,56.80;3.36,58.50;3.11,63.00;2.86,67.20;2.61,67.40;2.37,62.30;2.14,59.40;1.91,58.50;1.68,62.30;1.46,65.00;1.25,66.00;1.05,64.30;0.87,61.60;0.70,60.60;0.55,63.00;0.42,64.80;0.30,67.20;0.20,66.20;0.15,65.00;0.09,64.00;0.05,64.30;0.04,67.00;0.06,70.10;0.11,70.40;0.18,72.30;0.28,75.70;0.40,78.90;0.49,81.10;0.63,87.20;0.81,92.50;0.99,96.90;1.19,102.90;1.40,107.60;1.62,103.70;1.83,99.00;2.06,94.40;2.29,96.20;2.51,99.60;2.72,103.20;2.94,102.20;3.15,98.80;3.34,95.60;3.53,95.60;3.71,98.30;3.90,100.50;”

其实它存放的是一组坐标值,如(4.01,101.20)(x,y),它们这间是由“;”分开的,我们在取出这一组值中最大的

一个Y轴的值。

解决方法:

用INSTR(源字符串, 目标字符串, 起始位置, 匹配序号)来定位“;”的位置,

用substr(源字符串,起始位置,终址位置)来取得在两个“;”这间的坐标,

最后有类似的方法取出Y轴的值,最后返回。

以下是我写的一个FUN

create or replace function F_GetMaxNumber(obj in clob,firstSplitChar in char,secondSplitChar in Char)
/*
 功能:求最大Y坐标
 编写开始日期:2007年8月21日
 参数数据项定义:obj一个施工图中的坐标字符串,firstSplitChar第一个分割符,secondSplitChar第二个分割符;
 */
return number is
Result number:=0; /*返回值是一个整数*/
str clob;
str1 clob;
j binary_integer;
jj binary_integer;
k number:=1;
i number;
ii number;
returnmax number:=0;
temp number:=0;
begin
str:=obj;
str:=trim(str);/*清除空格*/
/*以下是做循环*/
loop
/*取出第一个以firstSplitChar分割字符串*/
if(k=1) then
  j:=INSTR(str,firstSplitChar,1,1);
  str1:=substr(str,1,j-1);
else
/*取出其它以firstSplitChar分割字符串*/
    j:=INSTR(str,firstSplitChar,1,k);
    jj:=INSTR(STR,firstSplitChar,J+1,1);
    str1:=substr(str,j+1,jj-j-1);
end if;
    i:=length(str1);
    /*在以secondSplitChar分割后比较Y坐标的大小,用returnmax来记录最大值*/
    ii:=Instr(str1,secondSplitChar,1,1);
    temp:=to_number(to_char(substr(str1,ii+1,i)));
if (temp>returnmax) then
   returnmax:=temp;/*比较,returnmax中放比较大的那个数,比到最后它就是最大的*/
end if;
k:=k+1;
exit when j=length(str);
end loop;
 Result:=returnmax;
return(Result);
end F_GetMaxNumber;


相 关 文 章   发布商链接
·解决ORACLE被锁定的资源两法
·oracle9i客户端如何连接oracle10g数...
·使用type类型和存储过程来完成oracle...
·利用函数实现oracle行列转换
·Oracle数据库的四种启动方式介绍
·怎样有效提高Oracle 10G增量备份的速...
·ORACLE 10G分区表维护:全局索引和物...
·如何完全清除Oracle
·Oracle服务费是如何计算的,以Oracle1...
·实例讲解对oracle进行简单树递归查询
 §最新评论:(评论内容只代表网友观点,与本站立场无关!)
网名: 验证码:  【所有评论】【↑返回顶部
评 分: 12 345
评论内容:(不能超过500字,请自觉遵守互联网相关政策法规。[按 Ctrl+Enter 可直接提交]
注意:请勿在本站发布政治话题、色情及违反法律的内容。
IT知道网 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。
推 荐 文 章
·Oracle数据库临时表的管理及...
·Oracle中to_date函数的详细使
·Oracle导致CPU进程100%原因及
·实例讲解对oracle进行简单树...
·Oracle服务费是如何计算的,以...
·如何完全清除Oracle
·ORACLE 10G分区表维护:全局...
·怎样有效提高Oracle 10G增量...
·Oracle数据库的四种启动方式...
·利用函数实现oracle行列转换
·使用type类型和存储过程来完...
·oracle9i客户端如何连接oracl...
·解决ORACLE被锁定的资源两法
·详细讲解Oracle数据库灾难防...
·oracle分析函数row_number的...
热 门 文 章
·Oracle内连接、外连接、右外...
·oracle分析函数row_number的...
·ORACLE使用中的常见、实用的...
·oracle9i客户端如何连接oracl...
·如何完全清除Oracle
·利用函数实现oracle行列转换
·导入、导出oracle数据库与复...
·ORACLE 10G分区表维护:全局...
·ORACLE实现字符串截取的功能
·几个方面入手oracle性能优化...
·使用type类型和存储过程来完...
·实例讲解对oracle进行简单树...
·Oracle中to_date函数的详细使...
·oracle数据库中如何修改字段...
·oracle自增序列sequence的使...
网站首页 - 关于本站 - 加入收藏 - 网站地图 - 友情连接 - 在线留言 - 联系我们 - 返回顶部
Copyright © 2007 IT知道网.[冀ICP备07026896号]. All Rights Reserved .