Oracle sql REGEXP 在某个点拆分字符串以保持含义 - 需要的建议

Posted

技术标签:

【中文标题】Oracle sql REGEXP 在某个点拆分字符串以保持含义 - 需要的建议【英文标题】:Oracle sql REGEXP to split a string at certain point so as to maintain the meaning- Suggestions required 【发布时间】:2021-02-25 16:23:30 【问题描述】:

我有一个超过 40 个字符的字符串,想把它分成两个有意义的完整字符串 将其设置为两个不同的字段。

示例: 从 DUAL 中选择“这个长字符串有八个单词七个空格”;

字符串长度为45

我需要将此字符串分成两部分,并设置两个不同的变量,每个变量的长度为 40,但我不想在中间打断字符串。

VAL1 >> SUBSTR of 0,40 看起来像:这个长字符串有八个字七个 S VAL2 >> SUBSTR of 41,80 看起来像:PACES

相反,我希望 VAL1 是 >> 这个长字符串有八个字七个(末尾有或没有空格都可以) VAL2 >> 空格

我尝试使用 REGEXP 获取空格数,然后拆分每个单词,然后根据我的要求将所有单词连接起来。然而,这不是一个好的解决方案.. 有没有办法可以有效地做到这一点?

【问题讨论】:

【参考方案1】:

这可能是一种方式:

with test(x) as
(
    SELECT 'THIS LONG STRING HAS EIGHT WORDS SEVEN SPACES' FROM DUAL
)
select substr(x, 1, 40-instr(reverse(substr(x, 1, 40)), ' ') ) s1,
       substr(x, 40-instr(reverse(substr(x, 1, 40)), ' ')+2) s2 
from test;  

给出:

S1                                     S2
-------------------------------------- ------
THIS LONG STRING HAS EIGHT WORDS SEVEN SPACES

想法是使用reverse以相反的顺序处理字符串,然后查找前40个字符中的最后一个空格(或还原字符串中的第一个空格)并使用此位置拆分字符串.

【讨论】:

感谢您的快速回复@Aleksej

以上是关于Oracle sql REGEXP 在某个点拆分字符串以保持含义 - 需要的建议的主要内容,如果未能解决你的问题,请参考以下文章

Oracle通过一个字段的值将一条记录拆分为多条记录

SQL REGEXP_SUBSTR 拆分时返回空字符串

oracle 字段比例拆分

oracle单行多列,拆分成多行

在 Oracle 中使用 regexp_substr 按顺序拆分字符串

在 Oracle 中使用 REGEXP_SUBSTR 作为拆分