2

ダッシュ (-) の前後の文字列から文字を抽出します。これまでのところ、以下のコードを使用して、ダッシュの前のすべての数字を返すことができました。

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

現在、ダッシュの後にすべての文字を返す方法を見つけようとしています。したがって、文字列がある場合:

20-150

クエリは 150 のみを返す必要があります。これを実行できる方法はありますか? ちなみに私はオラクルを使っています。みんなありがとう :)

4

4 に答える 4

7

これにより、ダッシュの後にすべてが返されます

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

于 2013-03-04T06:49:54.283 に答える
1

使用REGEXP_REPLACE:

SELECT REGEXP_REPLACE('20-150','(.*)-','') 
FROM dual;
于 2013-03-04T06:52:26.053 に答える
0

REGEXP_SUBSTR を使用:

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

あなたはこれを試すことができます

于 2013-03-04T11:46:52.993 に答える
-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)))
于 2020-08-13T08:35:09.220 に答える