【问题标题】:Limit the Number of Characters between Double Quotes using Oracle 11g PL/SQL使用 Oracle 11g PL/SQL 限制双引号之间的字符数
【发布时间】:2014-10-10 21:41:04
【问题描述】:

我需要一种方法,使用 Oracle 11g PL/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。

【问题讨论】:

  • 它与 SQL 表有什么连接?
  • 我不确定您是否可以在不使用 PL/SQL 来拆分字符串的情况下执行此操作。也许与正则表达式有关?不确定。
  • 抱歉 - 可以使用 PL/SQL - 将更新我的问题。

标签: sql regex oracle oracle11g substring


【解决方案1】:

您可以使用regexp_replace

regexp_replace(str,'"([^"]{1,32})[^"]*"','"\1"')

模式解释:

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

SQL Fiddle

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

Results

|                                                                                                              STR | REGEXP_REPLACE(STR,'"([^"]{1,10})[^"]*"','"\1"') |
|------------------------------------------------------------------------------------------------------------------|--------------------------------------------------|
| "AAAAAAA BBBBBBB CCCCCCC DDDDDD1","AAAAAAA BBBBBBB CCCCCCC DDDD","QWERTY","NoN1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1N1" |  "AAAAAAA BB","AAAAAAA BB","QWERTY","NoN1N1N1N1" |

【讨论】:

  • 正是我所需要的——你让它看起来如此简单。谢谢。
猜你喜欢
  • 1970-01-01
  • 2017-07-04
  • 2019-10-20
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 2022-01-20
  • 2021-08-30
相关资源
最近更新 更多