powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помите пожалуйста с решением запроса
21 сообщений из 21, страница 1 из 1
Помите пожалуйста с решением запроса
    #39415875
Artur93
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помите пожалуйста с решением запроса:
Выведите сотрудников, у которых email не совпадает со строкой, равной первой букве имени, соединенной с фамилией.
все находятся колонки в таблице employess
Колонка эмейл - email
Колонка имени - first_name
Колонка фамилии - last_name
Что получилось у меня:
Select * employees where email <> (first_name + last_name like '__%');

Спасибо!
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39415880
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сплошным нулям - сюда .
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39416003
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artur93,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with qwert as (select 'Ivanov' as last_name, 'Petia' as first_name, 'p.ivanov@somemail.org' as email from dual union all
select 'Ivanov' as last_name, 'Nikita' as first_name, 'i.nikita@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Petia' as first_name, 'p.petrov@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov@somemail.org' as email from dual)

select * from qwert 
where substr(upper(email),1,length(last_name)+2) = upper(substr(first_name,1,1))||'.'||upper(last_name)
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39416062
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artur93Что получилось у меня:
Select * employees where email <> (first_name + last_name like '__%'); LIKE Condition The pattern can contain special pattern-matching characters:An underscore (_) in the pattern matches exactly one character (as opposed to one byte in a multibyte character set) in the value.
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39421308
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooArtur93,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with qwert as (select 'Ivanov' as last_name, 'Petia' as first_name, 'p.ivanov@somemail.org' as email from dual union all
select 'Ivanov' as last_name, 'Nikita' as first_name, 'i.nikita@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Petia' as first_name, 'p.petrov@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov@somemail.org' as email from dual)

select * from qwert 
where substr(upper(email),1,length(last_name)+2) = upper(substr(first_name,1,1))||'.'||upper(last_name)



length(last_name)+2 - не очень корректно, т.к. пропустите ситуацию:
Код: plsql
1.
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov12345@somemail.org' as email from dual



попробуйте условие instr(email,'@')-1 , но надо понимать что поле email или везде имеет '@' или добавлять nvl если Вы решили использовать этот запрос как эталон
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39421341
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXLDshedooArtur93,


length(last_name)+2 - не очень корректно, т.к. пропустите ситуацию:
Код: plsql
1.
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov12345@somemail.org' as email from dual




Но ведь в данном случае email не совпадает со строкой, равной первой букве имени, соединенной с фамилией
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39424650
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooMaximaXXLпропущено...


length(last_name)+2 - не очень корректно, т.к. пропустите ситуацию:
Код: plsql
1.
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov12345@somemail.org' as email from dual




Но ведь в данном случае email не совпадает со строкой, равной первой букве имени, соединенной с фамилией

Ок, я не очень корректно дал пример, вот правильный:
Код: plsql
1.
select 'Petrov' as last_name, 'Ivan' as first_name, 'i.petrov12345@somemail.org' as email from dual


он показывает что резать email по длине last_name+2 не корректно
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39424698
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

Даже не заметил, что там не та буква имени стоит)

Сути не меняет, "%petrov12345@" уже не совпадает с "%petrov@", что отвечает условиям ТС'а.
Он же имел ввиду вообще любое несовпадение, а не только неправильно проставленные инициалы.
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39424852
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Artur93Выведите сотрудников, у которых email не совпадает со строкой, равной первой букве имени, соединенной с фамилией.


Вывел А.Н. Иванова, А.И. Иванова и А.Д. Иванова. Их уже можно заводить обратно?
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39425019
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DshedooArtur93,
Код: plsql
1.
2.
3.
4.
5.
6.
7.
with qwert as (select 'Ivanov' as last_name, 'Petia' as first_name, 'p.ivanov@somemail.org' as email from dual union all
select 'Ivanov' as last_name, 'Nikita' as first_name, 'i.nikita@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Petia' as first_name, 'p.petrov@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov@somemail.org' as email from dual)

select * from qwert 
where substr(upper(email),1,length(last_name)+2) = upper(substr(first_name,1,1))||'.'||upper(last_name)



В вашем примере Вы режите email вот так
Код: plsql
1.
substr(upper(email),1,length(last_name)+2) 


что для строки
Код: plsql
1.
select 'Petrov' as last_name, 'Ivan' as first_name, 'i.petrov12345@somemail.org' as email from dual


будет давать значение "I.PETROV" и будет совпадать со второй частью upper(substr(first_name,1,1))||'.'||upper(last_name)

хотя на самом деле эта запись не должна совпадать.

Я Вам порекомендовал резать email до знака "@" чтоб избежать такой ситуации на будущее
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Помите пожалуйста с решением запроса
    #39703652
Egory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, а можно ли решить данную задачу с LIKE И NOT LIKE ИЛИ regexp_like? Я уже третий час пытаюсь, но не пойму как в данной ситуации синхронизировать строки first_name и last_name с email.
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39703698
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egory,

такое?

Код: plsql
1.
upper(email) like upper(substr(first_name,1,1)||'.'||last_name)||'@%'
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39703711
julat21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egory,
Код: plsql
1.
2.
3.
4.
5.
6.
with qwert as (select 'Ivanov' as last_name, 'Petia' as first_name, 'p.ivanov@somemail.org' as email from dual union all
select 'Ivanov' as last_name, 'Nikita' as first_name, 'i.nikita@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Petia' as first_name, 'p.petrov@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov@somemail.org' as email from dual),
  lf as(select upper(email) email,  upper(substr(last_name, 1,1)||'.'||first_name) lf_name from qwert )
  select * from lf where not regexp_like(email, lf_name)
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39703712
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egoryданную задачу http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39703736
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
julat21
Код: plsql
1.
2.
3.
4.
5.
6.
with qwert as (select 'Ivanov' as last_name, 'Petia' as first_name, 'p.ivanov@somemail.org' as email from dual union all
select 'Ivanov' as last_name, 'Nikita' as first_name, 'i.nikita@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Petia' as first_name, 'p.petrov@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov@somemail.org' as email from dual),
  lf as(select upper(email) email,  upper(substr(last_name, 1,1)||'.'||first_name) lf_name from qwert )
  select * from lf where not regexp_like(email, lf_name)

select 'Хто' as last_name, 'Я' as first_name, 'хня какая-то' as email from dual
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39703738
julat21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Egory,
Код: plsql
1.
2.
3.
4.
5.
6.
with qwert as (select 'Ivanov' as last_name, 'Petia' as first_name, 'p.ivanov@somemail.org' as email from dual union all
select 'Ivanov' as last_name, 'Nikita' as first_name, 'i.nikita@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Petia' as first_name, 'p.petrov@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov@somemail.org' as email from dual),
  lf as(select upper(email) email,  upper(substr(first_name, 1,1)||'.'||last_name) lf_name from qwert )
  select * from lf where not regexp_like(email, lf_name)
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39703743
julat21
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,???
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39703814
Egory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я новичок, поэтому мне немного сложнова-то разобраться во всех ваших синтаксисах.

MaximaXXLEgory,

такое?

Код: plsql
1.
upper(email) like upper(substr(first_name,1,1)||'.'||last_name)||'@%'


Но спасибо, с вашей помощью и документации Oracle, я достиг, что мне было все-таки нужно. Мой запрос попроще и не затрагивает:
'.' и '@%' - это ведь в случае, если электронный адрес задан в полном формате?

Мой простенький запрос:
Код: plsql
1.
2.
select * from workers where
upper(email) not like upper(substr(first_name,1,1)|| last_name);



julat21Egory,
Код: plsql
1.
2.
3.
4.
5.
6.
with qwert as (select 'Ivanov' as last_name, 'Petia' as first_name, 'p.ivanov@somemail.org' as email from dual union all
select 'Ivanov' as last_name, 'Nikita' as first_name, 'i.nikita@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Petia' as first_name, 'p.petrov@somemail.org' as email from dual union all
select 'Petrov' as last_name, 'Ivan' as first_name, 'z.petrov@somemail.org' as email from dual),
  lf as(select upper(email) email,  upper(substr(last_name, 1,1)||'.'||first_name) lf_name from qwert )
  select * from lf where not regexp_like(email, lf_name)


Я сметен вашим запросом, не могли бы вы объяснить, отталкиваясь от моего простенького выше, что у вас тут? Начинается отсюда же?
Код: plsql
1.
2.
lf as(select upper(email) email,  upper(substr(last_name, 1,1)||'.'||first_name) lf_name from qwert )
  select * from lf where not regexp_like(email, lf_name)


Что такое lf_name, lf?
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39704013
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EgoryМой простенький запрос:
Код: plsql
1.
2.
select * from workers where
upper(email) not like upper(substr(first_name,1,1)|| last_name);





грубо
если в "кляузе" like нет псевдосимволов %_, то он будет заменен на <> (не равно)

ps
email без @ не email
....
stax
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39710536
Egory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Staxгрубо
если в "кляузе" like нет псевдосимволов %_, то он будет заменен на <> (не равно)

Спасибо, не знал. :)
...
Рейтинг: 0 / 0
Помите пожалуйста с решением запроса
    #39710538
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Staxесли в "кляузе" like нет псевдосимволов %_, то он будет заменен на <> (не равно)


Не совсем так. Это касается только литералов и constant expressions которые можно вычислить на этапе parse. Так-что к

Код: plsql
1.
2.
select * from workers where
upper(email) not like upper(substr(first_name,1,1)|| last_name);



это не относится.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
SQL> explain plan for
  2  select * from emp where ename like 'KING';

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    39 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    39 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("ENAME"='KING')

13 rows selected.

SQL> explain plan for
  2  select * from emp where ename like greatest('KI' || 'NG','JONES');

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     1 |    39 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     1 |    39 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("ENAME"='KING')

13 rows selected.

SQL> explain plan for
  2  select * from emp where ename like ename;

Explained.

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3956160932

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |     2 |    78 |     3   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| EMP  |     2 |    78 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("ENAME" LIKE "ENAME")

13 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помите пожалуйста с решением запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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