Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Oracle 11g PL/SQL限制双引号之间的字符数_Sql_Regex_Oracle_Oracle11g_Substring - Fatal编程技术网

使用Oracle 11g PL/SQL限制双引号之间的字符数

使用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”),并对找到的每

我需要一种方法,使用Oracle11gPL/SQL对双引号内的每一组数据应用32个字符的子字符串限制

基本上使用以下按原样提供给我的示例字符串,因为我无法控制此字符串的构造方式:

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" |