如何在Oracle SQL中选择不超过特定字符的子字符串?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

假设我有一个表列,其结果如下:

ABC_blahblahblah
DEFGH_moreblahblahblah
IJKLMNOP_moremoremoremore

我希望能够编写一个查询,该查询从上述表中选择此列,但只将子字符串返回到下划线(_)性格。例如:

ABC
DEFGH
IJKLMNOP

SUBSTRING函数似乎无法完成任务,因为它是基于位置的,下划线的位置也不同。

我想到了TRIM函数(特别是RTRIM功能):

SELECT RTRIM('listofchars' FROM somecolumn) 
FROM sometable

但我不知道如何使它工作,因为它似乎只删除了一个特定的列表/字符集,我真的只追求字符导致下划线字符。

提问于
用户回答回答于

使用SUBSTR、INSTR和NVL的组合(对于没有下划线的字符串)将返回所需的内容:

SELECT NVL(SUBSTR('ABC_blah', 0, INSTR('ABC_blah', '_')-1), 'ABC_blah') AS output
  FROM DUAL

结果:

output
------
ABC

用法:

SELECT NVL(SUBSTR(t.column, 0, INSTR(t.column, '_')-1), t.column) AS output
  FROM YOUR_TABLE t

用户回答回答于

请用

REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1) 

试试:

SELECT 
REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1) 
from dual

扫码关注云+社区