oracle切割字符串函数,Oracle字符串分割函数

本文分享了一篇关于在Oracle数据库中处理字符串分割问题的博客。作者在创建视图时遇到了需要将格式为“XXX,YYY”的字符串进行分割的问题,由于Oracle本身没有内置的字符分割函数,因此作者自行编写了一个函数。该函数能够根据指定的分隔符将字符串分割成两个字段。此外,还创建了一个名为`STR_SPLIT`的表类型,用于存储分割后的字符串。博客中还提到了其他数据库如Hive和SQL Server中的字符串分割函数,以及JavaScript、Delphi等编程语言中的相关函数用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在创建视图的时候,碰到一个问题,问题如下:

将字符格式为“XXX,YYY”分割出来,并且分割后作为两个字段放入视图中。

考虑使用字符分割函数,但是查找资料Oracle没有字符分割的函数(我对Oracle不熟悉)。

最后决定自己写个函数处理,函数的SQL如下:

create or replace function FUN_SPLITSTR(str varchar2,splitchart varchar2,num number) return varchar2 is

begin

declare o1 number:=0;

o2 number:=0;

rt varchar2(100):='';

begin

if instr(str,splitchart,1,1)=0 and num=1 then

return(str);

end if;

if instr(str,splitchart,1,1)=0 and num>1 then

return(rt);

end if;

if(num=1) then

o1:=instr(str,splitchart,1,num);

if o1>0 then

rt:=substr(str,1,o1-1);

else

rt:=str;

end if;

else

o1:=instr(str,splitchart,1,num-1);

o2:=instr(str,splitchart,1,num);

if o1>0 and o2=0 then

rt:=substr(str,o1+1,length(str)-o1);

else

rt:=substr(str,o1+1,o2-o1-1);

end if;

end if;

return (rt);

end;

end FUN_SPLITSTR;

oracle 字符串分割函数

首先创建一个类型: CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000); 创建函数: CREATE OR REPLACE FUNC ...

工作中用到的oracle字符串分割整理

oracle部分: 定义类型(用于字符串分割): create or replace TYPE "STR_SPLIT" IS TABLE OF VARCHAR2 (4000); 字 ...

hive函数 -- split 字符串分割函数

hive字符串分割函数 split(str, regex) - Splits str around occurances that match regexTime taken: 0.769 secon ...

Split字符串分割函数

非常非常常用的一个函数Split字符串分割函数. Dim myTest myTest = "aaa/bbb/ccc/ddd/eee/fff/ggg" Dim arrTest arr ...

ASP.NET中常用的字符串分割函数

asp.net字符串分割函数用法 先来看个简单的实例 但是其数组长度却是25,而不是3.下面这种方法是先将“[111cn.net]”替换成一个特殊字符,比如$,在根据这个字符执行Split 例如下面我 ...

MSSQLSERVER数据库- 字符串分割函数返回类型表

遇到这样一个问题,存储在数据库的数据是一串字符串如:1,2,3,4,5,6.想把这串字符串进行转变成一个表格,如下: 1 2 3 4 5 6 就是这样一个问题,有人同事,写了一个这样的封装函数,这样就 ...

SQL点滴3—一个简单的字符串分割函数

原文:SQL点滴3-一个简单的字符串分割函数 偶然在电脑里看到以前保存的这个函数,是将一个单独字符串切分成一组字符串,这里分隔符是英文逗号“,”  遇到其他情况只要稍加修改就好了 CREATE FUN ...

Delphi 自带的字符串分割函数split

下面介绍Delphi自带的字符串分割函数,根据你的需要来使用. 1.ExtractStrings function ExtractStrings(Separators, WhiteSpace: TSy ...

JavaScript中字符串分割函数split用法实例

这篇文章主要介绍了JavaScript中字符串分割函数split用法,实例分析了javascript中split函数操作字符串的技巧,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了JavaSc ...

随机推荐

Ubuntu 12.10

上海交通大学更新服务器(教育网千兆接入,联通/电信线路情况不详),包含其他开源镜像: deb http://ftp.sjtu.edu.cn/ubuntu/ quantal main multivers ...

小明A+B[HDU2096]

小明A+B Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submi ...

access的时间相关的查询

string sql = "select * from CONCURRENCY WHERE CONCURRENCY.DATE_FLAG BETWEEN  cdate('2013-11-1', ...

win7 Visual Studio 2008 安装程序时出现“ 加载安装组件时遇到问题。取消安装。”处理方法

win7 Visual Studio 2008 安装程序时出现“ 加载安装组件时遇到问题.取消安装.”处理方法 vs2008试用期到期,卸载.重新安装都会出现“ 加载安装组件时遇到问题.取消安装.”无 ...

Mat, IplImage, CvMat, Cvarr关系及元素获取

### Oracle 数据库中将字符串分割成多列 在 Oracle 数据库中,可以通过多种方式来实现将逗号分隔的字符串拆分为多个单独的值并将其显示为多行或多列。一种常见的方式是利用 `REGEXP_SUBSTR` 函数配合自定义表函数或递归查询来完成此任务。 #### 使用 REGEXP_SUBSTR 和 CONNECT BY 实现单行列转多行 对于简单的场景下,如果只需要把一个由逗号连接起来的一串字符变成每一项占据一行的形式,则可以采用如下 SQL 查询语句: ```sql SELECT TRIM(REGEXP_SUBSTR('x,y,z,a,b,c', '[^,]+', 1, LEVEL)) AS value FROM dual CONNECT BY REGEXP_SUBSTR('x,y,z,a,b,c' , '[^,]+', 1, LEVEL) IS NOT NULL; ``` 这段代码会返回每一条记录代表原输入中的每一个元素[^1]。 #### 将结果集横向展开转换为固定数量的列 当希望得到的结果是以若干列为单位而不是多行时(即所谓的“宽表”形式),则可以根据预期的最大宽度预先设定好所需的列数,并通过类似下面的例子来进行变换: 假设已知待解析后的列表长度不会超过三个项目,那么就可以这样写: ```sql WITH data (str) AS ( SELECT 'x,y,z' FROM DUAL UNION ALL SELECT 'a,b' FROM DUAL ), split_data AS( SELECT str, REGEXP_COUNT(str, ',') + 1 cnt, CAST(NULL AS VARCHAR2(4000)) col1, CAST(NULL AS VARCHAR2(4000)) col2, CAST(NULL AS VARCHAR2(4000)) col3 FROM data ) SEARCH DEPTH FIRST BY str SET order_id CYCLE str SET is_cycle TO 1 DEFAULT 0 SELECT s.str "Original String", MAX(CASE WHEN rn = 1 THEN val END) "Column_1", MAX(CASE WHEN rn = 2 THEN val END) "Column_2", MAX(CASE WHEN rn = 3 THEN val END) "Column_3" FROM split_data sd, LATERAL(SELECT ROWNUM rn,val FROM XMLTABLE(('"' || REPLACE(sd.str,',','","')||'"')) ) t(val) GROUP BY s.str; ``` 上述脚本首先创建了一个包含测试数据的数据集 `data` ,接着计算每个字符串中有多少个组成部分存入临时视图 `split_data`. 接着使用 `LATERAL` 关键字联合子查询对原始字符串进行了切割操作,最后按照原来的字符串聚合这些被切开的部分到不同的列上.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值