2013-03-04 147 views
2

我要从破折号( - )前后的字符串中提取字符。到目前为止,我能够使用此代码下面划线之前,所有的数字返回:删除破折号前的字符

SELECT 
INSTR('100-7', '-'), 
SUBSTR('100-7', 1, INSTR('100-7', '-')-1) 
FROM dual; 

现在我试图找到一种方法破折号后的所有字符返回。所以如果我有一个字符串:

20-150 

查询应该只返回我150.有反正我可以做到这一点吗?顺便说一句,我正在使用Oracle。谢谢你们:)

回答

6

这将破折号后恢复一切

SELECT SUBSTR(value, INSTR(value, '-')+1) invalue 
    FROM (SELECT '20-150' value FROM dual) t; 

输出:

| INVALUE | 
----------- 
|  150 | 

sqlfiddle

,并把两者一起

SELECT SUBSTR(value, 1, INSTR(value, '-') - 1) lvalue, 
     SUBSTR(value, INSTR(value, '-') + 1) rvalue 
    FROM (SELECT '20-150' value FROM dual) t; 

出放:

| LVALUE | RVALUE | 
------------------- 
|  20 | 150 | 

sqlfiddle

+0

你好彼得,我欠你一个啤酒。感谢您的帮助。你的代码效果很好。 – GianIsTheName 2013-03-04 07:08:15

1

使用REGEXP_REPLACE

SELECT REGEXP_REPLACE('20-150','(.*)-','') 
FROM dual; 
-1

使用REGEXP_SUBSTR:

SELECT REGEXP_SUBSTR ('20-15055555555', '[^-]+', 1, 2) rep 
    FROM DUAL; 

你可以试试这个