我对使用定界符拆分字符串有疑问。
首先拆分基于 , 分隔符选择那些拆分的字符串应该基于 - 分隔符拆分
我的原始字符串:UMC12I-1234,CSM3-123,VQ,
预期输出:
UMC12I
CSM3
VQ
每个值都是行值
我试过这个选项
WITH fab_sites AS (
SELECT trim(regexp_substr('UMC12I-1234,CSM3-123,VQ,', '[^,]+', 1, LEVEL)) fab_site
FROM dual
CONNECT BY LEVEL <= regexp_count('UMC12I-1234,CSM3-123,VQ,', '[^,]+')+1
)
SELECT fab_site FROM fab_sites WHERE fab_site IS NOT NULL
-- 根据,分隔符拆分
输出是:
UMC12I-1234
CSM3-123
VQ
如何获得预期的输出? (需要再次拆分 - 分隔符)
最佳答案
您可以使用 regexp_substr
提取 -
之前的“单词”
([^,-]+)(-[^,-]+)?
该模式将匹配并捕获第 1 组中除 、
和 -
之外的一个或多个字符,然后将匹配一个可选序列-
和除 、
和 -
之外的 1+ 个字符。
参见 regex demo .
在上面的正则表达式中使用此 regex_substr
行而不是您的行:
SELECT trim(regexp_substr('UMC12I-1234,CSM3-123,VQ,', '([^,-]+)(-[^,-]+)?', 1, LEVEL, NULL, 1)) fab_site
参见 online demo
关于regex - 如何在 Oracle 11g regexp_substr 函数中使用两个定界符拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43503292/