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

Откуда: K-City
Сообщений: 8
Добрый вечер, появилась проблемка. Есть таблица, в которой есть стоблец, из коготорого нужно достать только (!) фамилию имя и отчество, с использованием дистинкта, так как у одного и того-же пользователя могут быть разные счета, а нужно посчитать его как одного, записи в этом столбце выглядят приблизительно так:

пополнение карточного счета №123456, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ
пополнение счета №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ
пополнение счета №123456, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ согласно доверенности
поп. карт. сч. №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ
пополнение счета №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ согл. дов. 152\23

Связывают их запятая после номера счета, и ФИО пишеться с заглавных букв.
Подскажите как это можно реализовать?
7 ноя 12, 21:33    [13436124]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
Добрый Э - Эх
Guest
ну, раз есть за что цепляться ("Связывают их запятая после номера "), то instr + substr тебе в помощь
7 ноя 12, 21:39    [13436147]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
parik
Member

Откуда: K-City
Сообщений: 8
Добрый Э - Эх
ну, раз есть за что цепляться ("Связывают их запятая после номера "), то instr + substr тебе в помощь

есть еще варианты? инстр+сабстр запрос получается гигантским ради трёх пробелов, возможно ли сделать как-то при помощи REGEXP_SUBSTR (like)?
7 ноя 12, 21:41    [13436158]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51768

Добрый Э - Эх
instr + substr тебе в помощь

regexp_substr() не проще будет?..

Posted via ActualForum NNTP Server 1.5

7 ноя 12, 21:43    [13436173]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
parik
Member

Откуда: K-City
Сообщений: 8
Dimitry Sibiryakov
Добрый Э - Эх
instr + substr тебе в помощь

regexp_substr() не проще будет?..

я извиняюсь, не могли бы вы приблизительно написать запрос? regexp_substr() не доводилось использовать=\
7 ноя 12, 21:47    [13436192]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
Добрый Э - Эх
Guest
parik,

ну да, запись не самая короткая выйдет:

with
  t as
    (
      select 'пополнение карточного счета №123456, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ' as str from dual union all
      select 'пополнение счета №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ' as str from dual union all
      select 'пополнение счета №123456, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ согласно доверенности' as str from dual union all
      select 'поп. карт. сч. №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ' as str from dual union all
      select 'пополнение счета №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ согл. дов. 152\23' as str from dual
    )
select str,
substr(substr(str,instr(str,',')+2),1,instr(substr(str,instr(str,',')+2)||' ',' ',1,3)-1) as fio
  from t
7 ноя 12, 21:49    [13436200]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 51768

parik
regexp_substr() не доводилось использовать=\

Мне тоже. Но ведь всё рано или поздно случается в первый раз...

Posted via ActualForum NNTP Server 1.5

7 ноя 12, 21:49    [13436202]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
parik
Dimitry Sibiryakov
пропущено...

regexp_substr() не проще будет?..

я извиняюсь, не могли бы вы приблизительно написать запрос? regexp_substr() не доводилось использовать=\


надо мозгами шевелить и учиться пользоваться всем!

возможно не самый изящный вариант
with x as(
select 'пополнение карточного счета №123456, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ 1231' a from dual union all select
'пополнение счета №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ ddd' from dual union all select
'пополнение счета №123456, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ согласно доверенности' from dual union all select
'поп. карт. сч. №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ' from dual union all select
'пополнение счета №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ согл. дов. 152\23' from dual
)

select trim(trim(',' from regexp_substr(a,', [А-Я ]+',1,1,'c') ))
from x
7 ноя 12, 22:01    [13436254]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
stax..
Guest
parik,
шо делать если фамилия
Бендер Остап Сулейман Берта-Мария Ибрагимович

.....
stax
7 ноя 12, 22:23    [13436362]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
init.ora
Member

Откуда: гетто
Сообщений: 317
stax..
parik,
шо делать если фамилия
Бендер Остап Сулейман Берта-Мария Ибрагимович

.....
stax



select trim(trim(',' from regexp_substr(a,', [А-Я -]+',1,1,'c') ))
from x

:D
7 ноя 12, 22:43    [13436488]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
MasterZiv
Member

Откуда: Питер
Сообщений: 34630
parik,

У тебя проблема с бд, физлиц надо сливать ДО вставки, а не в отчетах.
Даже если ты напишеш этот запрос, довольно несложный, работать то он будет медленно и печально.
Разве только талица маленькая...
7 ноя 12, 23:45    [13436713]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
ten
Member

Откуда: Екатеринбург
Сообщений: 1672
MasterZiv
У тебя проблема с бд

Судя по всему у тебя мощный хрустальный шар ? Не зная структуры базы, не зная смысла задачи, фактически не зная ничего о системе автора давать такие заключения, как бы это помягче выразиться, в общем не совсем правильно.
8 ноя 12, 09:19    [13437503]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по селекту  [new]
hexcept
Member

Откуда:
Сообщений: 237
что-нить
with x as(
 select 'пополнение карточного счета №123456, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ 1231' a from dual union all
 select'пополнение счета №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ ddd' from dual union all
 select 'пополнение счета №123456, ИВАНОВ И.И., согласно доверенности' from dual union all
 select 'поп. карт. сч. №654321, ЛИ ВАН-ЧОХ' from dual union all
 select 'пополнение счета №654321, ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ согл. дов. 152\23' from dual union all
 select 'ИВАН ВЛАДИМИРОВИЧ ПЕТРОВ согл. дов. 152\23' from dual union all
 select 'пополнение счета №654321, И.В.ПЕТРОВ согл. дов. 152\23' from dual union all
 select 'сч.№654321, БЕНДЕР ОСТАП СУЛЕЙМАН БЕРТА-МАРИЯ IBRAGIMOVICH, согл. дов. 152\23' from dual
)
select
 a,
 rtrim(regexp_substr(a,'[[:upper:]][[:upper:] .-]+')) fio
-- если наличие ',' перед ФИО важно:
-- rtrim(regexp_substr(a,'[[:upper:]][[:upper:] .-]+',replace(instr(a,','),0,length(a)))) fio
from x
8 ноя 12, 10:55    [13437921]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить