使用Oracle 11g PL/SQL限制双引号之间的字符数
我需要一种方法,使用Oracle11gPL/SQL对双引号内的每一组数据应用32个字符的子字符串限制 基本上使用以下按原样提供给我的示例字符串,因为我无法控制此字符串的构造方式:使用Oracle 11g PL/SQL限制双引号之间的字符数,sql,regex,oracle,oracle11g,substring,Sql,Regex,Oracle,Oracle11g,Substring,我需要一种方法,使用Oracle11gPL/SQL对双引号内的每一组数据应用32个字符的子字符串限制 基本上使用以下按原样提供给我的示例字符串,因为我无法控制此字符串的构造方式: str := ‘"AAAAAAA BBBBBBB CCCCCCC DDDDDD1","AAAAAAA BBBBBBB CCCCCCC DDDD",”QWERTY”,”N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1”’; 我需要遍历每个双引号之间的每组值,例如(“QWERTY”),并对找到的每
str := ‘"AAAAAAA BBBBBBB CCCCCCC DDDDDD1","AAAAAAA BBBBBBB CCCCCCC DDDD",”QWERTY”,”N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1”’;
我需要遍历每个双引号之间的每组值,例如(“QWERTY”),并对找到的每个分组应用一个32的子字符串
因此,使用上面的字符串示例,我需要执行以下操作:
str := ‘"substr(‘AAAAAAA BBBBBBB CCCCCCC DDDDDD1’,1,32)","substr(‘AAAAAAA BBBBBBB CCCCCCC DDDD’,1,32)",”substr(‘QWERTY’,1,32)”,”substr(‘N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1’,1,32)”’;
因此,最后,我对str的最终结果将由四个分组组成,其中每个分组的长度小于或等于32。您可以使用
模式说明:
" --matches a double quote
([^"]{1,32}) --matches a group of 1 to 32 characters, containing anything other than double quotes.
--surrounded by brackets, to form the first capture group.
[^"]* --matches zero or more characters other than double quotes
" --matches a double quote
:
| STR | REGEXP_REPLACE(STR,'"([^"]{1,10})[^"]*"','"\1"') |
|------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|
| "AAAAAAA BBBBBBB CCCCCCC DDDDDD1","AAAAAAA BBBBBBB CCCCCCC DDDD","QWERTY","NoN1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1" | "AAAAAAA BB","AAAAAAA BB","QWERTY","NoN1N1N1N1" |
它与SQL表有什么连接?我不确定您是否可以使用PL/SQL来拆分字符串。也许是正则表达式?不确定。抱歉-可以使用PL/SQL-将更新我的问题。正是我需要的-你让它看起来很简单。谢谢
with x(str) as (
select '"AAAAAAA BBBBBBB CCCCCCC DDDDDD1","AAAAAAA BBBBBBB CCCCCCC DDDD","QWERTY","NoN1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1"' str
from dual
)
select str,
regexp_replace(str,'"([^"]{1,10})[^"]*"','"\1"')
from x
| STR | REGEXP_REPLACE(STR,'"([^"]{1,10})[^"]*"','"\1"') |
|------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|
| "AAAAAAA BBBBBBB CCCCCCC DDDDDD1","AAAAAAA BBBBBBB CCCCCCC DDDD","QWERTY","NoN1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1" | "AAAAAAA BB","AAAAAAA BB","QWERTY","NoN1N1N1N1" |