相关疑难解决方法(0)

如何在Oracle SQL中选择一个特定字符的子字符串?

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

ABC_blahblahblah
DEFGH_moreblahblahblah
IJKLMNOP_moremoremoremore
Run Code Online (Sandbox Code Playgroud)

我希望能够编写一个从所述表中选择此列的查询,但只返回子字符串直到Underscore(_)字符.例如:

ABC
DEFGH
IJKLMNOP
Run Code Online (Sandbox Code Playgroud)

SUBSTRING函数似乎不适合任务,因为它是基于位置的,并且下划线的位置不同.

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

SELECT RTRIM('listofchars' FROM somecolumn) 
FROM sometable
Run Code Online (Sandbox Code Playgroud)

但是我不确定我是如何让它工作的,因为它似乎只删除了某个列表/一组字符,而我实际上只是在导致Underscore字符的字符之后.

sql oracle substring trim

77
推荐指数
4
解决办法
51万
查看次数

REGEXP_SUBSTR与INSTR和SUBSTR的性能和可读性

从我的另一个问题,使用带有字符串限定符的REGEXP_SUBSTR,我试图决定哪种方法更好用.

由此产生的数据集只应delimters之前显示的字符串PLE,#ALL以正确的顺序.包中已有的当前查询是这样的(DDL和DML位于帖子的底部):

SELECT  DATA1
      , DECODE(SIGN(0 - instr(DATA1, 'PLE')), -1, SUBSTR(DATA1, 1, instr(DATA1, 'PLE') - 1)) GET_DATA_TILL_FIRST_PLE
      , DECODE(SIGN(0 - instr(DATA1, '#')), -1, SUBSTR(DATA1, 1, instr(DATA1, '#') - 1)) GET_DATA_TILL_FIRST_NUM_SIGN
      , DECODE(SIGN(0 - instr(DATA1, 'ALL')), -1, SUBSTR(DATA1, 1, instr(DATA1, 'ALL') - 1)) GET_DATA_TILL_FIRST_ALL
      , NVL(DECODE(SIGN(0 - instr(DATA1, 'PLE')), -1, SUBSTR(DATA1, 1, instr(DATA1, 'PLE') - 1), 0,
        DECODE(SIGN(0 - instr(DATA1, '#')), -1, SUBSTR(DATA1, 1, instr(DATA1, '#') - 1), 0,
        DECODE(SIGN(0 - instr(DATA1, 'ALL')), …
Run Code Online (Sandbox Code Playgroud)

regex sql oracle

5
推荐指数
1
解决办法
5274
查看次数

标签 统计

oracle ×2

sql ×2

regex ×1

substring ×1

trim ×1