0

以下のように、特定のフィールドのデータ長はランダムです。

特殊文字の前の文字だけを選択したい。

サンプル:

123456_3
454656484784_13
15051514745_7

期待される結果は次のとおりです。

123456
454656484784
15051514745
4

3 に答える 3

0

一般的な例:

substring(your_data, 0, instr(your_data, '_'))

于 2013-01-04T14:16:13.990 に答える
0

第一部を入手するには

select substr(your_column, 1, INSTR(your_column, '_') - 1) 
from your_table

最後の部分を取得するには

select substr(your_column, INSTR(your_column, '_') + 1) 
from your_table

SQLFiddle デモ

于 2013-01-04T14:17:29.113 に答える
0

迅速かつ汚い-Oracle/Sybaseの手順などの単一のステップでこれを行う方法を理解できます...

-- Ignore 0 or negative numbers --
-- This gives you your end pos for substr --
SELECT distinct(Instr('123456_3 454656484784_13 15051514745_7', '_', LEVEL)-1) substr_end_pos
  FROM dual
  CONNECT BY LEVEL < length('123456_3 454656484784_13 15051514745_7') 
  /

 -- This is start pos for substr --
 SELECT Distinct(Instr('123456_3 454656484784_13 15051514745_7', ' ', LEVEL)+1)  substr_start_pos
   FROM dual
   CONNECT BY LEVEL < length('123456_3 454656484784_13 15051514745_7')
  /

 -- These are substr start/end numbers returned by above queries --
 Select Substr('123456_3 454656484784_13 15051514745_7',  1, 6) From dual -- substr_start_pos=1, substr_end_pos=6
 /

 Select Substr('123456_3 454656484784_13 15051514745_7',  10, 21-9) From dual -- substr_start_pos=10, substr_end_pos=21-substr_start_pos-1
 /

 Select Substr('123456_3 454656484784_13 15051514745_7',  26, 36-25) From dual -- substr_start_pos=26 substr_end_pos=36-substr_start_pos-1
/
于 2013-01-04T15:02:47.317 に答える