0

入力:

start1
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
start2

start1とstart2の間にある文字列をキャプチャしたいと思います。それらの間の文字列は可変になります。出力:

david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com

部分文字列/インデックス関数の使用

4

3 に答える 3

0

pl / sqlにある場合は、次のように実行できます。

SQL> declare
  2    v_str varchar2(2000) := 'start1
  3  david@gmail.com
  4  david@gmail.com
  5  david@gmail.com
  6  david@gmail.com
  7  david@gmail.com
  8  david@gmail.com
  9  david@gmail.com
 10  start2';
 11    v_newstr varchar2(2000);
 12    v_start_delim varchar2(10) := 'start1';
 13    v_end_delim varchar2(10) := 'start2';
 14  begin
 15    v_newstr := substr(v_str, instr(v_str, v_start_delim)+length(v_start_delim),
 16                       instr(v_str, v_end_delim) - instr(v_str, v_start_delim) - length(v_start_delim));
 17
 18    -- remove leading/trailing breaks.
 19    v_newstr := trim(both chr(10) from v_newstr);
 20    dbms_output.put_line(v_newstr);
 21
 22  end;
 23  /
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com

PL/SQL procedure successfully completed.

または、SQLに文字列がある場合(文字列がすべて1行にあると仮定)

SQL> select trim(both chr(10) from
 2           substr(str, instr(str, 'start1')+length('start1'),
 3                instr(str, 'start2') - instr(str, 'start1') - length('start1'))
 4         ) newstr
 5    from data;

NEWSTR
-----------------------
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
david@gmail.com
于 2013-02-26T08:15:11.907 に答える
0

まず、による注文を使用する必要があります。SQLの規則により、順序を使用しない場合、データベースは、前回同じクエリを実行したときとは異なる順序で結果を返すことができます。

IDで注文し、クエリしているフィールド名がnameであると仮定します。

select name
from table1
where id > (select id from table1 where name = 'start1')
  and id < (select id from table1 where name = 'start2')
order by id
于 2013-02-25T14:54:35.720 に答える
0

何が必要かを理解することは不可能なので、私はここで推測しています:

SELECT TRIM(SUBSTR(str, start1+1, btwn_starts)) final_str
  FROM
  (
  SELECT 'start1 '||' some data in between '||' start2' str
        , Length('start1') start1
        , Length('start2') start2 
        , Length(' some data in between ') btwn_starts
    FROM dual
  )
 /

Output string: some data in between
于 2013-02-25T15:31:33.700 に答える