如果一个字符串中有像逗号或其它符号分隔,你想把它折分成列,如’first field, second field , third field’,
拆成
first field
second field
third field
第一种 用10G开始支持的正则表达式
SELECT REGEXP_SUBSTR (‘first field, second field , third field’, ‘[^,]+’, 1,rownum)
FROM DUAL
CONNECT BY ROWNUM <=
LENGTH (‘first field, second field , third field’) – LENGTH (REPLACE (‘first field, second field , third field’, ‘,’, ”))
+1
————
first field
second field
third field
REGEXP_SUBSTR 函数是把那个串以正则不是以,(逗号)开头的截取,第二个参数是取第几组,rownum伪列序号,connect 循环 ,循环次数为串总长度-去除分隔符后=几个分隔符 +1
第二种用type,function
第一,先创建一个Type
CREATE OR REPLACE TYPE type_split IS TABLE OF VARCHAR2 (4000)
第二,创建函数
create or replace function split(p_list varchar2,p_sep varchar2 := ’,’)
return type_split pipelined
IS
l_idx pls_integer;
v_list varchar2(50) := p_list;
begin
loop
l_idx := instr(v_list,p_sep);
if l_idx > 0 then
pipe row(substr(v_list,1,l_idx-1));
v_list := substr(v_list,l_idx+length(p_sep));
else
pipe row(v_list);
exit;
end if;
end loop;
end split;
第三,调试
select * from table(split(’aaa,bbb,ccc’,’,’))
扩展 regexp_replace
V字段中每个值中字符串以,分隔,如果不是以9开头那组串加‘00’
anbob@NCME>create table testreg(v varchar2(80));
Table created.
anbob@NCME>insert into testreg values(’911,000,12,31′);
1 row created.
anbob@NCME>insert into testreg values(’11911,554000,312,931′);
1 row created.
anbob@NCME>commit;
Commit complete.
anbob@NCME>select ltrim(regexp_replace(‘,’||v,’([,])’,'\100′),’,') newv,v from testreg;
NEWV V
—————————— ——————————
00911,00000,0012,0031 911,000,12,31
0011911,00554000,00312,00931 11911,554000,312,931
分享到:
相关推荐
oracle 关于字符串中带有逗号间隔的查询 例如 我想查出dwdh中有“飞信”的内容(不包括移动飞信,飞信移动) 关于字符串中带有逗号间隔的查询 利用like
oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现
Oracle 分割字符串 返回多行数据
oracle 某列存儲的值是有逗號的字符串,希望通過逗號分隔開來顯示多行。sql,有預期結果,有項目實戰。
不做详解,直接上图。 SELECT T.NAME, T.TESTSTR FROM TEST2 T; SELECT DISTINCT T.NAME, REPLACE(REGEXP_SUBSTR(T.TESTSTR, '[^,]+', 1, LEVEL), ',', ' ') TESTSTR FROM TEST2 T WHERE 1 = 1 ...
Oracle数据库的两个字段值为逗号分割的字符串,例如:字段A值为“1,2,3,5”,字段B为“2”。 想获取两个字段的交集(相同值)2,获取两个字段的差集(差异值)1,3,5。 一、最终实现的sql语句 1、获取交集(相同值)...
NULL 博文链接:https://czjxdm.iteye.com/blog/466948
oracle分隔字符串,分隔一个字符串成多个字符串,分隔条件按照用户自定义
项目需求是这样的表里的某个字段存储的值是以逗号分隔开来的,要求根据分隔的每一个值都能查出来数据,但是不能使用like查询。这篇文章主要介绍了Oracle字段根据逗号分割查询数据,需要的朋友可以参考下
aaa,bbb,ccc n=2时 截取结果 bbb 很明白了吧 哈
找了网上很多资料,都没有详细的做法有的还很复杂,自己写了个分割函数,通过直接查询就能分割多行,很方便。
可以快速将字符串转化为大小写、加引号和逗号便于查询 可以快速将字符串转化为大小写、加引号和逗号便于查询
需求如下: 将一串字符转换为标准的分隔符字符串 如:”,,,,a,svv,ss,,v,,v,,,” 转换后:”a,svv,ss,v,v” js实现代码:多用于后台中,关键词替换,自动将空格,全角逗号,统一替换为半角逗号,并将多个逗号合并 ...
它将编译程序标志列表指定为一个用逗号分隔的字符串列表。 值范围: native (PL/SQL 模块将按本机代码来编译。), interpreted (然后 PL/SQL 模块将被编译为 PL/SQL 字节代码格式), debug (PL/SQL 模块将用探测调试...
3.支持任意字符串作为每行分隔符,例如\r,\r\n,或者十六进制字符或任意指定的字符串(例如可实现把整个日志文件装入数据库的单个clob字段). 4.支持任意大小的文本,装入几十GB都试过没问题。 5.明确到每一行的错误信息....
以往的处理方式有如下几种: 1、在存储过程内写循环,逐个分析字符串中的ID,然后逐个处理。缺点:循环一次处理一个,如果每次判断都很多,效率将很受影响。适合每次处理要做单独判断的情况。2、使用临时表,先调用...
这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 CursorType Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括...