Pre*_*zel 77 sql oracle substring trim
假设我有一个表列,其结果如下:
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字符的字符之后.
OMG*_*ies 132
使用SUBSTR,INSTR和NVL(对于没有下划线的字符串)的组合将返回您想要的内容:
SELECT NVL(SUBSTR('ABC_blah', 0, INSTR('ABC_blah', '_')-1), 'ABC_blah') AS output
FROM DUAL
Run Code Online (Sandbox Code Playgroud)
output
------
ABC
Run Code Online (Sandbox Code Playgroud)
SELECT NVL(SUBSTR(t.column, 0, INSTR(t.column, '_')-1), t.column) AS output
FROM YOUR_TABLE t
Run Code Online (Sandbox Code Playgroud)
如果使用Oracle10g +,则可以通过REGEXP_SUBSTR使用regex .
use*_*270 36
这可以使用REGEXP_SUBSTR轻松完成.
请用
REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1)
Run Code Online (Sandbox Code Playgroud)
其中STRING_EXAMPLE是你的字符串.
尝试:
SELECT
REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1)
from dual
Run Code Online (Sandbox Code Playgroud)
它会解决你的问题.
你需要得到第一个下划线的位置(使用INSTR),然后使用substr从第一个字符串到(pos-1)获取字符串的一部分.
1 select 'ABC_blahblahblah' test_string,
2 instr('ABC_blahblahblah','_',1,1) position_underscore,
3 substr('ABC_blahblahblah',1,instr('ABC_blahblahblah','_',1,1)-1) result
4* from dual
SQL> /
TEST_STRING POSITION_UNDERSCORE RES
---------------- ------------------ ---
ABC_blahblahblah 4 ABC
Run Code Online (Sandbox Code Playgroud)
小智 6
SELECT REGEXP_SUBSTR('STRING_EXAMPLE','[^_]+',1,1) from dual
Run Code Online (Sandbox Code Playgroud)
是正确的答案,由用户1717270发布
如果您使用INSTR,它将为您提供一个字符串的位置,该字符串假定其中包含"_".如果没有怎么办?那么答案就是0.因此,当你想要打印字符串时,它会打印一个NULL.示例:如果要从"host.domain"中删除域.在某些情况下,您只有短名称,即"主机".很可能你想打印"主机".好吧,INSTR它会给你一个NULL因为它没有找到任何".",即它会从0到0打印.REGEXP_SUBSTR在所有情况下你都会得到正确的答案:
SELECT REGEXP_SUBSTR('HOST.DOMAIN','[^.]+',1,1) from dual;
Run Code Online (Sandbox Code Playgroud)
主办
和
SELECT REGEXP_SUBSTR('HOST','[^.]+',1,1) from dual;
Run Code Online (Sandbox Code Playgroud)
主办
| 归档时间: |
|
| 查看次数: |
513583 次 |
| 最近记录: |