0

0

一个比较复杂的多次拆分字符串的存储过程

黄舟

黄舟

发布时间:2017-02-16 13:19:57

|

1499人浏览过

|

来源于php中文网

原创

自己写的特殊拆分函数如下: 
create or replace function fn_split_str_2(var_str   in varchar2)return varchar2
/* 
有一张表 t1,里面有个字段叫c3,存的是所有店铺的点位信息。
现在需要一个存储过程,将所有的记录的c3字段的坐标值都缩小3倍,写入c字段


内容举例为  220.25 257,220.25 269.75,229.25 269.75,229.25 257
每个逗号分开的是一个个的坐标点,每个坐标点用空格区分x坐标和y坐标


存储函数名称:fn_split_str_2
用途:把bis_store坐标v_coords3缩小三倍更新coords,比如
author:huangshan
*/

as
  var_tmp     varchar2(4000);
  var_element varchar2(4000);
  var_result varchar2(4000);
  var_instr_first number;
  var_instr_second number;
  var_length number;




begin

  var_tmp := var_str;
  var_instr_first :=0;
  var_instr_second :=0;
  var_result :='';
  var_length:=0;


  
  /* 替换掉传过来的特殊字符
chr(9) 制表符 
chr(10)回车
chr(13)换行
  */

  var_tmp:= replace(var_tmp,chr(10),'');
  var_tmp:= replace(var_tmp,chr(13),'');
  var_tmp:= replace(var_tmp,chr(9),'');
  
  while instr(var_tmp, ' ') > 0 
    or instr(var_tmp, ',')>0 
    or(var_length>0) loop
    var_instr_first :=instr(var_tmp, ' ');
    var_instr_second :=instr(var_tmp, ',');
   -- dbms_output.put_line('var_instr_kg:'||var_instr_first||'  ');
   -- dbms_output.put_line('var_instr_dh:'||var_instr_second||'  ');
         var_length:=length(var_tmp);
   --  dbms_output.put_line('var_length  :'||var_length||'  ');


     
/* 1 如果是先有空格,比如 12 32,12 32这类 **/
 

  if var_instr_first


 
      /* 2 如果是已经截取完空格,逗号在前面比如 32,12 32这类 **/    
 

  elsif var_instr_first>var_instr_second and  var_instr_second>0 then
           var_element := round(to_number(substr(var_tmp, 1, var_instr_second-1))/3,2);
           var_result := var_result || var_element || ',' ;
           var_tmp := substr(var_tmp,var_instr_second+1, length(var_tmp));
         --  dbms_output.put_line('var_result dh:'||var_result);
        --   dbms_output.put_line('var_tmp dh:'||var_tmp||'  ');
        --   dbms_output.put_line('var_element dh:'||var_element||'  ');



/* 3 如果是已经截取完逗号,已经只剩下最后一个坐标x y,比如12 32这类 **/  
   

Face Swap Online
Face Swap Online

在线免费换脸,支持图片换脸和视频换脸

下载
 elsif var_instr_first>var_instr_second and  var_instr_second=0 then
         var_element := round(to_number(substr(var_tmp, 1, var_instr_first-1))/3,2);
         var_result := var_result|| var_element|| ' ';
         var_tmp := substr(var_tmp,+1, length(var_tmp));
       --  dbms_output.put_line('var_result kg:'||var_result);
       --  dbms_output.put_line('var_tmpvar_instr_first kg:'||var_tmp||'  ');
        -- dbms_output.put_line('var_element kg:'||var_element||'  ');


        
/* 4 如果是已经截取到最后一个坐标,比如32这类 **/ 
 

    elsif var_instr_first=0 and var_instr_second=0 and var_length>0 then
      --  dbms_output.put_line('var_tmp the last one:'||var_tmp||'  ');
       var_element := round(to_number(var_tmp)/3,2);
       var_result := var_result  || var_element;
       var_tmp:='';
       --  dbms_output.put_line('var_result 0:'||var_result);
       --  dbms_output.put_line('var_tmp 0:'||var_tmp||'  ');
       --  dbms_output.put_line('var_element 0:'||var_element||'  ');


 
/* 5 如果其他的东西,设置成''退出while循环为止 **/ 

     else 
       var_tmp:='';
     end if;
    -- dbms_output.put_line('     ');
     
  end loop;
  return var_result;
end FN_SPLIT_STR_2;




-- google其他人的拆分function如下:
-- 拆分函数

create or replace function split_str(var_str   in varchar2, 
                                       var_split in varchar2) 
/**************************************************** 
  注意 先执行下面语句 创建类型 
  create or replace type t_ret_table is table of varchar2(100) 
  ** 函数名称:split_str 
  ** 参    数:【名称】         【类型 】      【说明】 
  **           var_str          varchar2       要拆分的字符串 
  **           var_split        varchar2       字符串分隔符 
  ** 返 回 值:Result           t_ret_table    拆分后数组集合 
  ** 摘    要:拆分字符串 
  调用 举例: 
  select * from table(split_str('2008-10-21','-')) 
  ****************************************************/ 
  return t_ret_table is 
  var_out     t_ret_table; 
  var_tmp     varchar2(4000); 
  var_element varchar2(4000);


begin 
 

 var_tmp := var_str; 
  var_out := t_ret_table(); 
  --如果存在匹配的分割符 
  while instr(var_tmp, var_split) > 0 loop 
    var_element := substr(var_tmp, 1, instr(var_tmp, var_split) - 1); 
    var_tmp     := substr(var_tmp, 
                          instr(var_tmp, var_split) + length(var_split), 
                          length(var_tmp)); 
    --var_out.extend(1); 
    var_out.extend; 
    var_out(var_out.count) := var_element; 
  end loop; 
  --var_out.extend(1); 
  var_out.extend; 
  var_out(var_out.count) := var_tmp; 
  return var_out; 
end split_str;

 以上就是一个比较复杂的多次拆分字符串的存储过程的内容,更多相关内容请关注PHP中文网(www.php.cn)!


热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Python 序列化
Python 序列化

本专题整合了python序列化、反序列化相关内容,阅读专题下面的文章了解更多详细内容。

0

2026.02.02

AO3官网入口与中文阅读设置 AO3网页版使用与访问
AO3官网入口与中文阅读设置 AO3网页版使用与访问

本专题围绕 Archive of Our Own(AO3)官网入口展开,系统整理 AO3 最新可用官网地址、网页版访问方式、正确打开链接的方法,并详细讲解 AO3 中文界面设置、阅读语言切换及基础使用流程,帮助用户稳定访问 AO3 官网,高效完成中文阅读与作品浏览。

91

2026.02.02

主流快递单号查询入口 实时物流进度一站式追踪专题
主流快递单号查询入口 实时物流进度一站式追踪专题

本专题聚合极兔快递、京东快递、中通快递、圆通快递、韵达快递等主流物流平台的单号查询与运单追踪内容,重点解决单号查询、手机号查物流、官网入口直达、包裹进度实时追踪等高频问题,帮助用户快速获取最新物流状态,提升查件效率与使用体验。

27

2026.02.02

Golang WebAssembly(WASM)开发入门
Golang WebAssembly(WASM)开发入门

本专题系统讲解 Golang 在 WebAssembly(WASM)开发中的实践方法,涵盖 WASM 基础原理、Go 编译到 WASM 的流程、与 JavaScript 的交互方式、性能与体积优化,以及典型应用场景(如前端计算、跨平台模块)。帮助开发者掌握 Go 在新一代 Web 技术栈中的应用能力。

11

2026.02.02

PHP Swoole 高性能服务开发
PHP Swoole 高性能服务开发

本专题聚焦 PHP Swoole 扩展在高性能服务端开发中的应用,系统讲解协程模型、异步IO、TCP/HTTP/WebSocket服务器、进程与任务管理、常驻内存架构设计。通过实战案例,帮助开发者掌握 使用 PHP 构建高并发、低延迟服务端应用的工程化能力。

5

2026.02.02

Java JNI 与本地代码交互实战
Java JNI 与本地代码交互实战

本专题系统讲解 Java 通过 JNI 调用 C/C++ 本地代码的核心机制,涵盖 JNI 基本原理、数据类型映射、内存管理、异常处理、性能优化策略以及典型应用场景(如高性能计算、底层库封装)。通过实战示例,帮助开发者掌握 Java 与本地代码混合开发的完整流程。

5

2026.02.02

go语言 注释编码
go语言 注释编码

本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

62

2026.01.31

go语言 math包
go语言 math包

本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

55

2026.01.31

go语言输入函数
go语言输入函数

本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

27

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Excel 教程
Excel 教程

共162课时 | 15.2万人学习

前端Vue3实战【手写vue项目】
前端Vue3实战【手写vue项目】

共9课时 | 1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号