powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проверка емайл пользователя regexp_like
12 сообщений из 12, страница 1 из 1
Проверка емайл пользователя regexp_like
    #39607888
Sweetira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Подскажите плиз как правильно решить такую задачу:

неактуальный пользователь, имеющая e-mail annak@ указывается как получатель документов, реальным получателем которых является e-mail jannak@
email_cb - это список всех адресов получателей документа (текстовое поле типа клоб)
osname - имя пользователя, может быть другое сочетание имени пользователя в дальнейшем

select * from email, empl
where upper(email.email_cb) like '%' || upper(trim(empl.osname)) || '@' || '%'

В строке со всеми емайлами email_cb проверить есть ли перед osname пробелы, знаки пунктуации ( , ; '')
regexp_like( upper(email.email_cb), '[^ [:space:] [:punct:]]')

можно это решить с помощью регулярнового выражения? Как правильно это записать?
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39607908
lpadла
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sweetiraможно это решить с помощью регулярнового выраженияс помощью микроскопа и такой-то матери можно многое решить. только вот что именно?
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39611442
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sweetira,

Давай-ка попробуем еще раз и на этот раз русским языком.
У тебя есть таблица актуальных пользователей:
Код: plaintext
1.
2.
3.
empl
id      number
osname  varchar2

У тебя есть таблица документов и всех получателей документов
Код: plaintext
1.
2.
email
doc_id    number 
email_cb  clob

В которой в поле email_cb через разделитель содержит всех получателей документа, например
Код: plaintext

Тебе нужно из поля email_cb найти всех пользователей, у которых первая часть имени до @ соответсвует записи из таблицы empl.osname?
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39611706
Sweetira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
feagor,
да так.
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39611728
instr like
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
empl
id      number
osname  varchar2 -- vasya.pupkin 

select * 
from daual
 where instr('vasya.pupkin@company.com, jannak@company.com','vasya.pupkin'||'@') > 0
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39611762
feagooor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sweetira,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with empl as(
select 'jannak' osname from dual
union all
select 'vasya.pupkin' osname from dual
union all
select 'an23_us' osname from dual),
email as (
select 1 id,'jannak@company.com,annak@company.com,vasya.pupkin@mail.ru,an2_us@gmail.com' e_list from dual
)

,t as (
select 
  trim(regexp_substr(t.e_list, '[^,]+', 1, levels.column_value)) email
from 
  email t,
  table(cast(multiset(select level from dual connect by  level <= length (regexp_replace(t.e_list, '[^,]+'))  + 1) as sys.OdciNumberList)) levels
)
SELECT * FROM t,empl
where regexp_replace(t.email,'@.+$')=empl.osname


Код: plaintext
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39611866
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
feagooor,

А зачем эта конструкция из table(cast(multiset... ?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with empl as(
select 'jannak' osname from dual
union all
select 'vasya.pupkin' osname from dual
union all
select 'an23_us' osname from dual),
email as (
select 1 id,'jannak@company.com,annak@company.com,vasya.pupkin@mail.ru,an2_us@gmail.com' e_list from dual
)
,t as (
  select 
    trim(regexp_substr(t.e_list, '[^,]+', 1, level)) email
  from email t
  connect by regexp_substr(t.e_list, '[^,]+', 1, level) is not null
)
SELECT * FROM t,empl
where regexp_replace(t.email,'@.+$')=empl.osname
;
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39611883
instr like
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Понты
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39611900
feagooor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rpovarov,

первое что попалось по запросу list to table:)
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39611927
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpovarov,

Не проще regexp_substr(str,'([^|,]+)@',1,level,'i',1) ?

.....
stax
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39620944
Sweetira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
feagooor,

спасибо за помощь!
так работает быстро.
Можно попросить ссылку на инструкцию по table(cast(multiset(select level from dual connect by level?

с конструкцией connect by regexp_substr(t.e_list, '[^,]+', 1, level) is not null. даже по одной записи очень долго думает
...
Рейтинг: 0 / 0
Проверка емайл пользователя regexp_like
    #39620946
Sweetira
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rpovarov,

Спасибо за помощь,
но
с конструкцией connect by regexp_substr(t.e_list, '[^,]+', 1, level) is not null. даже по одной записи очень долго думает
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Проверка емайл пользователя regexp_like
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]