2013-02-25 3 views
0

Входа:как извлечь переменный Lengh строк из файла в datasatage с помощью подстроки или индекса функции

start1 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
start2 

Я хочу, чтобы захватить все, что строка находится между Начало1 и start2. Строка между ними будет переменной. Выход:

[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 

Использование Substring/Индекс функции

+0

В чем разница между start1 и start2? Что нужно извлечь между ними? – Art

+0

загружает этот файл в таблицу и ищет какой-нибудь SQL? Не уверен, что именно вы спрашиваете – tbone

+0

Я использую столы для использования, это небольшой фрагмент кода. Я застрял между ними. satrt1 и start2 - это начальные и конечные позиции, которые я знаю. Но строка между start1 и start2 будет переменной длины. Я хочу извлечь эту строку между start1 и start2 – Pooja

ответ

0

если это в pl/sql, то вы можете сделать это:

SQL> declare 
    2 v_str varchar2(2000) := 'start1 
    3 [email protected] 
    4 [email protected] 
    5 [email protected] 
    6 [email protected] 
    7 [email protected] 
    8 [email protected] 
    9 [email protected] 
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/
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected]il.com 
[email protected] 
[email protected] 

PL/SQL procedure successfully completed. 

или если у вас была строка в SQL (при условии, что строка все в одном ряду)

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 
----------------------- 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
[email protected] 
0

Прежде всего вы должны использовать заказ на. По правилам SQL, если вы не используете порядок, тогда база данных может возвращать результаты в любым заказом, даже отличающимся от того, когда вы делали тот же запрос.

Предполагая, что вы заказ по идентификатору, и имя поля, которое вы запрашиваете это имя

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 
+0

Привет, Марлин, не могли бы вы предложить мне то же самое с помощью функции подстроки? – Pooja

+0

Как выясняется, нет места для подстроки. Ваше описание указывает, что эти значения указаны в поле таблицы. –

+0

У меня есть эти значения, используя Script, и я хочу использовать функцию substring в datasatge. Поэтому я был бы признателен, если вы предложите использовать функцию подстроки. – Pooja

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 
+0

будет отправлено сообщение от mail_Id между start1 и start2. Lengh не фиксирован. – Pooja

+0

@Pooja - замените строку «некоторые данные в промежутке» на «[email protected]» во внутреннем запросе, и вы получите ее на выходе. Это лучшее, что я могу сделать, поскольку я все еще не вижу всей картины, извините. вам решать, чтобы это было ясно. – Art

 Смежные вопросы

  • Нет связанных вопросов^_^