Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Редактирование строки  [new]
aguka
Member

Откуда: Milano
Сообщений: 57
Есть строка1 и строка2. Нужно отрезать от строки1 строку 2, если она находится в конце и только один раз. Если ее нету, то оставить как есть.
Например строка1 = "AAA B CCC B CCC", а строка2="B CCC". В итоге должно остаться "AAA".
Я сделала таким образом:
select
case
	substr(trim(an.ac_indirizzo_1 || ' ' || an.ac_indirizzo_2),length(trim(an.ac_localita))+1,
    length(trim(an.ac_localita)))
when trim(an.ac_localita)  
then substr(trim(an.ac_indirizzo_1 || ' ' || an.ac_indirizzo_2),1,
                                   length(trim(an.ac_indirizzo_1 || ' ' || an.ac_indirizzo_2))-length(trim(an.ac_localita))) 
 else 	trim(an.ac_indirizzo_1 || ' ' || an.ac_indirizzo_2)
 end indirizzo
    from
ccanagr00f an   

Можно как-нибудь переделать покрасивше? При условии, что оно вообще написано без ошибок. Я навскидку проверила, вроде правильно.
8 июн 07, 14:02    [4247755]     Ответить | Цитировать Сообщить модератору
 Re: Редактирование строки  [new]
aguka
Member

Откуда: Milano
Сообщений: 57
ошибка... вот мой вариант:
select
case
substr(trim(an.ac_indirizzo_1 || ' ' || an.ac_indirizzo_2),length(trim(an.ac_indirizzo_1 || ' ' || an.ac_indirizzo_2))-length(trim(an.ac_localita))+1,
    length(trim(an.ac_localita)))
when trim(an.ac_localita)  
then substr(trim(an.ac_indirizzo_1 || ' ' || an.ac_indirizzo_2),1,
                                   length(trim(an.ac_indirizzo_1 || ' ' || an.ac_indirizzo_2))-length(trim(an.ac_localita))) 
 else 	trim(an.ac_indirizzo_1 || ' ' || an.ac_indirizzo_2)
 end indirizzo
    from
ccanagr00f an  
8 июн 07, 14:13    [4247836]     Ответить | Цитировать Сообщить модератору
 Re: Редактирование строки  [new]
db-man
Guest
select rtrim('AAA B CCC B CCC', 'B CCC') from dual;
8 июн 07, 14:19    [4247879]     Ответить | Цитировать Сообщить модератору
 Re: Редактирование строки  [new]
AlexOI
Member

Откуда: Санкт-Петербург
Сообщений: 161
db-man
select rtrim('AAA B CCC B CCC', 'B CCC') from dual;


вообще то просили один раз отрезать


aguka
Есть строка1 и строка2. Нужно отрезать от строки1 строку 2, если она находится в конце и только один раз.
8 июн 07, 14:30    [4247977]     Ответить | Цитировать Сообщить модератору
 Re: Редактирование строки  [new]
db-man
Guest
AlexOI
вообще то просили один раз отрезать

Да, но...
автор
Например строка1 = "AAA B CCC B CCC", а строка2="B CCC". В итоге должно остаться "AAA".
8 июн 07, 14:34    [4248018]     Ответить | Цитировать Сообщить модератору
 Re: Редактирование строки  [new]
aguka
Member

Откуда: Milano
Сообщений: 57
ой, я даже в описании задачи ошиблась.
читать нужно так

Например строка1 = "AAA B CCC B CCC", а строка2="B CCC". В итоге должно остаться "AAA B CCC".
8 июн 07, 14:36    [4248029]     Ответить | Цитировать Сообщить модератору
 Re: Редактирование строки  [new]
AlexOI
Member

Откуда: Санкт-Петербург
Сообщений: 161
Если 10-ка, то можно регулярнымы выражениями пользоваться

select regexp_replace('AAA B CCC B CCC', '(*)(B CCC$)', '\1') from dual;
8 июн 07, 14:40    [4248055]     Ответить | Цитировать Сообщить модератору
 Re: Редактирование строки  [new]
db-man
Guest
Ну тогда, может быть, типа такого...
with v as (select 'AAA B CCC B CCC' str, 'B CCC' sub from dual)
select substr(str, 1, length(str)-length(sub))||
       rtrim(substr(str, length(str) - length(sub)+1), sub)
from v
или с помощью regexp, если 10-ка.
8 июн 07, 14:42    [4248064]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить