在短划线之前删除角色

时间:2013-03-04 06:45:19

标签: oracle

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

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

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

20-150

查询应该只返回150.无论如何我能做到吗?顺便说一下,我正在使用Oracle。谢谢你们:))

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

使用REGEXP_REPLACE

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

答案 2 :(得分:0)

使用REGEXP_SUBSTR:

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

你可以试试这个

答案 3 :(得分:-1)

查询应该是这样的。

select substr('P_A_VA1234_1_EE',(INSTR('P_A_VA1234_1_EE','_',1,2)+1),(INSTR('P_A_VA1234_1_EE','_',1,4)-(INSTR('P_A_VA1234_1_EE','_',1,2)+1)))original from dual

select substr(shipment_gid,(INSTR(shipment_gid,'_',1,2)+1),(INSTR(shipment_gid,'_',1,4)-(INSTR(shipment_gid,'_',1,2)+1)))original from dual

SUBSTR(S.SHIPMENT_GID,8,8) LOADID,

select substr(shipment_gid,(INSTR(shipment_gid,'_',1,2)+1),(INSTR(shipment_gid,'_',1,4)-(INSTR(shipment_gid,'_',1,2)+1)))load,shipment_gid from shipment where shipment_gid like '%DHL/CLS.CLS_CV_%';

SUBSTR(S.SHIPMENT_GID,(INSTR(S.SHIPMENT_GID,'_',1,2)+1),(INSTR(S.SHIPMENT_GID,'_',1,4)-(INSTR(S.SHIPMENT_GID,'_',1,2)+1)))