oracle 获取字符串中到第二个字符到最后一个字符的部分

yh2wf1be  于 2023-01-16  发布在  Oracle
关注(0)|答案(2)|浏览(454)

我有以下字符串

'HOLA1_HOLA2_HOLA3_HOLA4'
'HOLA1_HOLA2_HOLA3_HOLA4_HOLA5'

我怎样才能得到字符串中第二个到最后一个出现的“_”字符的部分?
预期结果:

'HOLA1_HOLA2'
'HOLA1_HOLA2_HOLA3'
qqrboqgw

qqrboqgw1#

使用简单(快速)的字符串函数,查找子字符串直到倒数第二个下划线(而不是使用(缓慢)的正则表达式):

SELECT SUBSTR(value, 1, INSTR(value, '_', -1, 2) - 1) AS first_part
FROM   table_name;

其中,对于示例数据:

CREATE TABLE table_name (value) AS
SELECT 'HOLA1_HOLA2_HOLA3_HOLA4' FROM DUAL UNION ALL
SELECT 'HOLA1_HOLA2_HOLA3_HOLA4_HOLA5' FROM DUAL;

输出:
| 第一部分|
| - ------|
| 全息图1_全息图2|
| 全息图1_全息图2_全息图3|
fiddle

ruarlubt

ruarlubt2#

关于具有此行为的正则表达式:您可以使用预视来获得预期的结果
.*(?=_)
lookahead是一个零长度Assert(不包括在match中),Assert一个match必须跟在给定的表达式后面(在本例中为_)。默认情况下,regex执行贪婪匹配,因此lookahead的目标是给定文本中的最后一个下划线。regex101

相关问题