如何应用 `REGEXP_SUBSTR` 从字符串中提取特定的子字符串?
How to apply `REGEXP_SUBSTR` to extract specific substring from string?
我有以下字符串 011/2020-PL00-70-31
(它可能略有不同,例如 011/2020-PL00-70-3
或 011/2020-PL00-70-310
)。我需要从字符串中提取最后一个 -
之前的所有字符串。作为 011/2020-PL00-70-310
的 REGEXP_SUBSTR
的结果,我只需要得到 011/2020-PL00-70
,即没有最后 4 个符号(但在某些情况下可能没有 2 或 3 个符号)。
我是 PL 中的正则表达式的新手 SQL,很抱歉这个问题这么简单。
非常感谢。
在这种特殊情况下,我认为您过度考虑了使用正则表达式的解决方案。您的连字符始终是第三个连字符,因此您只需使用 INSTR
即可找到第三个连字符。在此处查看此查询:
SELECT SUBSTR(sample, 1, INSTR(sample, '-', 1, 3)-1) AS match
FROM sample_table;
我已将结果与 SQLFiddle 相关联 - http://sqlfiddle.com/#!4/c30207/7/0
您可以使用正则表达式捕获组 ()
从模式中仅获取您需要的部分。
SELECT REGEXP_SUBSTR(sample, '^(.*)-\d+$',1,1,'',1) AS sample2
FROM sample_table
SAMPLE2
011/2020-PL00-70
011/2020-PL00-70
011/202-PL00-70
演示 db<>fiddle here
正则表达式模式测试here
您可以将尾随数字替换掉:
REGEXP_REPLACE(whatever, '(-[^-]+)$', '')
正则表达式捕获减号和任何后续的非减号字符([^-]+
;或者您可以仅匹配数字:\d+
)– if 它们位于字符串的末尾 ($
),因此中间数字受到保护。
我有以下字符串 011/2020-PL00-70-31
(它可能略有不同,例如 011/2020-PL00-70-3
或 011/2020-PL00-70-310
)。我需要从字符串中提取最后一个 -
之前的所有字符串。作为 011/2020-PL00-70-310
的 REGEXP_SUBSTR
的结果,我只需要得到 011/2020-PL00-70
,即没有最后 4 个符号(但在某些情况下可能没有 2 或 3 个符号)。
我是 PL 中的正则表达式的新手 SQL,很抱歉这个问题这么简单。
非常感谢。
在这种特殊情况下,我认为您过度考虑了使用正则表达式的解决方案。您的连字符始终是第三个连字符,因此您只需使用 INSTR
即可找到第三个连字符。在此处查看此查询:
SELECT SUBSTR(sample, 1, INSTR(sample, '-', 1, 3)-1) AS match
FROM sample_table;
我已将结果与 SQLFiddle 相关联 - http://sqlfiddle.com/#!4/c30207/7/0
您可以使用正则表达式捕获组 ()
从模式中仅获取您需要的部分。
SELECT REGEXP_SUBSTR(sample, '^(.*)-\d+$',1,1,'',1) AS sample2
FROM sample_table
SAMPLE2 |
---|
011/2020-PL00-70 |
011/2020-PL00-70 |
011/202-PL00-70 |
演示 db<>fiddle here
正则表达式模式测试here
您可以将尾随数字替换掉:
REGEXP_REPLACE(whatever, '(-[^-]+)$', '')
正则表达式捕获减号和任何后续的非减号字符([^-]+
;或者您可以仅匹配数字:\d+
)– if 它们位于字符串的末尾 ($
),因此中间数字受到保护。