如果一个字符串中有像逗号或其它符号分隔,你想把它折分成列,如’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数据库中,进行字符串查询时,特别是当字符串中包含逗号等特殊字符时,我们需要巧妙地使用SQL的LIKE操作符来实现精确匹配。这里,我们面对的问题是想要查询DWDH字段中含有"飞信"但不包含"移动飞信"或"飞信...
`instr()` 是Oracle中的一个内建函数,它用于查找子串在目标字符串中的位置。例如,`instr(string, substring)` 返回`substring`在`string`中第一次出现的位置。虽然这不是直接的字符串分割函数,但可以配合其他...
本文将详细介绍如何利用Oracle内置函数来实现从含有逗号和冒号的字符串中提取特定部分的功能。 #### 1. 使用REGEXP_SUBSTR函数 `REGEXP_SUBSTR`函数是Oracle提供的一种强大的工具,用于从文本字符串中提取匹配正则...
例如,遍历一个游标并添加每个记录的值到一个字符串中。 6. **XMLAGG() 函数**: 虽然主要设计用于XML处理,但`XMLAGG()`也可用于字符串连接。它返回一个XML串,可以进一步转换为纯文本: ```sql SELECT ...
Oracle的`REGEXP_SUBSTR`函数用于从字符串中提取符合正则表达式模式的部分。在这个例子中,`[^,]+`是一个正则表达式,表示匹配任何非逗号字符的一个或多个实例。参数`1, LEVEL`是指从字符串的第1个字符开始,按层级...
oracle存储过程中入参是逗号分隔,并且参数要使用在in过滤语句中查询数据。处理的方法与实现
根据给定的信息,本文将详细解释如何在SQL中实现截取用特定字符分割的字符串中的第n个子字符串。此需求通常应用于数据处理与分析场景中,尤其在处理半结构化或非结构化的文本数据时非常有用。 ### 核心知识点解析 ...
Oracle 分割字符串 返回多行数据
本文详细介绍了如何在 Oracle 数据库中实现字符串分隔的功能,通过自定义函数 `splitstr` 实现了根据用户定义的分隔符来分割字符串的目标。这种方法不仅灵活,而且易于维护和扩展,非常适合于处理各种复杂的字符串...
oracle 某列存儲的值是有逗號的字符串,希望通過逗號分隔開來顯示多行。sql,有預期結果,有項目實戰。
它根据正则表达式`[^,]+`(表示非逗号的任何字符的一个或多个连续序列)来分割字符串,返回符合条件的部分。`REGEXP_REPLACE`函数虽然在此案例中未被直接使用,但它也是一个重要的正则表达式处理函数,可以用于替换...
假设我们有一个名为 `data_column` 的列,其中包含以逗号分隔的数据,如 'value1,value2,value3',我们可以使用以下SQL语句来获取第一个值: ```sql SELECT SUBSTR(data_column, 1, INSTR(data_column, ',', 1) -...
`INSTR`函数用于查找一个字符串在另一个字符串中的位置,其基本语法格式为: ```sql INSTR(source_string, search_string, start_position, occurrence) ``` - **source_string**:源字符串。 - **search_string**...
在Oracle数据库环境中,有时我们需要获取一个表的所有列名,并且以特定格式(如逗号分隔)输出这些列名。这种需求通常出现在多种场景中,比如动态SQL构建、数据迁移或者系统日志记录等。本篇文章将详细介绍如何在...
`substr`函数用于从给定的字符串中截取一部分。其基本语法如下: ```sql SUBSTR(string, start, [length]) ``` - `string`:源字符串,即你要截取的部分。 - `start`:开始位置,从1开始计算。如果`start`为负数,...
在Oracle数据库中,有时我们遇到一个特殊的查询需求,即字段中的值是以逗号分隔的字符串,我们需要根据每个单独的值来查询数据。在这种情况下,简单的`LIKE`查询无法满足需求,因为`LIKE`通常用于匹配模式,而不是...
这个示例代码将 bp_marking 表中的 sfc_no 字段与对应的所有 mark_operation_id 字段合并成一个字符串,并用逗号分隔每个字段的值。 如果需要去重,可以使用 DISTINCT 关键字,示例代码如下: ```sql SELECT sfc_no...
2. **使用`CONNECT BY`语法**:利用`CONNECT BY`语法来递归地处理字符串,从而提取每个由逗号分隔的数字序列。 3. **使用`INSTR`函数**:通过`INSTR`函数来定位分隔符(逗号)的位置,进而提取每个子字符串。 4. **...
`@separator`,即字符串中拆分符。函数返回一个临时表 `@temp`,其中包含分割后的结果。 ```sql CREATE FUNCTION [dbo].[StringSplit] ( @ttstring NVARCHAR(MAX), @separator CHAR ) RETURNS @temp TABLE ...