请选择 进入手机版 | 继续访问电脑版

大富翁Delphi开发技术网站

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2741|回复: 0

[精品文章] Oracle自动格式化字符串中的数字,例如:苏办发[2016]1号---苏办发[02016]00001号

[复制链接]

69

主题

96

帖子

846

积分

管理员

哈哈哈哈

Rank: 9Rank: 9Rank: 9

积分
846
发表于 2017-3-8 09:56:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

我们经常需要进行字符串的排序,但是如果字符串里的数字不规则,那么排序经常出问题,例如文号,可能后面的序号不是规则补0的,而且后面还有文字,导致排序不好看,通过下面的脚本,可以对字符串里的数字进行规则化,然后排序就比较整齐,但是比较消耗时间,数据两不大,可以使用

脚本:


  1. create or replace function FormatStringEx( OldStr IN VARCHAR2 )
  2. RETURN VARCHAR2
  3. IS
  4.   ReturnStr VARCHAR2 (1000);
  5.   TempStr VARCHAR2 (1000);
  6.   NumberStr VARCHAR2 (1000);
  7.   CharStr VARCHAR2 (1000);
  8.   NumberPos NUMBER(10);
  9.   CharPos NUMBER(10);
  10. BEGIN
  11.   TempStr:=OldStr;
  12.   ReturnStr:=' ';
  13.   WHILE (instr(translate(TempStr,'0123456789',lpad('0',10,'0')),'0')>0 )
  14.   LOOP
  15.       NumberPos:=instr(translate(TempStr,'0123456789',lpad('0',10,'0')),'0');
  16.       CharPos:=regexp_instr(TempStr,'[^[:digit:]]');
  17.       
  18.       CharStr:=Substr(TempStr,1,NumberPos-1);
  19.       TempStr:=Substr(TempStr,NumberPos,1000);
  20.       
  21.       if (CharPos>0) then
  22.          NumberStr:= Substr(TempStr,1,CharPos-1);
  23.          TempStr:=Substr(TempStr,CharPos,1000);
  24.       else
  25.          NumberStr:= Substr(TempStr,1,1000);
  26.          TempStr:='';      
  27.       end if;
  28.   
  29.       NumberPos:=instr(translate(TempStr,'0123456789',lpad('0',10,'0')),'0');
  30.       
  31.       if (NumberPos>0) then
  32.          ReturnStr:=ReturnStr||CharStr||to_char(NumberStr,'00000000');
  33.        else
  34.          ReturnStr:=ReturnStr||CharStr||to_char(NumberStr,'00000000')||TempStr;
  35.       end if;

  36.   END LOOP ;
  37.   
  38.   if (ReturnStr=' ')then
  39.      ReturnStr:=OldStr;
  40.   end if;
  41.   
  42.   RETURN Trim(ReturnStr);
  43. END FormatStringEx;


  44. //请执行上面的自定义函数

  45. select instr(translate('abdefhaha哈哈','0123456789',lpad('0',10,'0')),'0') from dual;

  46. select wh,instr(translate(wh,'0123456789',lpad('0',10,'0')),'0'),regexp_instr(wh,'[^[:digit:]]'),FormatStringEx(wh) from T_64816DB9E0194  

  47. where tm = 'wwwwwwwwwwwwwww'

  48. select to_char('345dd','00000000') from dual;  

  49. delete from T_64816DB9E0194


复制代码



转载请保留当前帖子的链接:http://www.dfwlt.com/forum.php?mod=viewthread&tid=2334 谢谢!

搜索简单,分享不易,且分享且珍惜,您难道不想分享下您的心得?如果觉得本文章好的话,您可以在我们网站上注册,然后发布您的好的心得,让大家共同进步,谢谢!

最新添加

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

申请友链|Archiver|手机版|小黑屋|大富翁Delphi开发技术网站 ( 苏ICP备12065705号-4 苏ICP备12065705号-4

GMT+8, 2020-7-13 10:14 , Processed in 0.106420 second(s), 28 queries .

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表