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

Спасибо!
...
Рейтинг: 0 / 0
08.03.2017, 16:14
    #39415880
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помите пожалуйста с решением запроса
Сплошным нулям - сюда .
...
Рейтинг: 0 / 0
09.03.2017, 08:50
    #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
09.03.2017, 11:59
    #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
17.03.2017, 11:14
    #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
17.03.2017, 11:39
    #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
22.03.2017, 11:06
    #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
22.03.2017, 12:03
    #39424698
Dshedoo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помите пожалуйста с решением запроса
MaximaXXL,

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

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


Вывел А.Н. Иванова, А.И. Иванова и А.Д. Иванова. Их уже можно заводить обратно?
...
Рейтинг: 0 / 0
22.03.2017, 16:03
    #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
Период между сообщениями больше года.
17.09.2018, 14:51
    #39703652
Egory
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помите пожалуйста с решением запроса
Ребята, а можно ли решить данную задачу с LIKE И NOT LIKE ИЛИ regexp_like? Я уже третий час пытаюсь, но не пойму как в данной ситуации синхронизировать строки first_name и last_name с email.
...
Рейтинг: 0 / 0
17.09.2018, 15:29
    #39703698
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помите пожалуйста с решением запроса
Egory,

такое?

Код: plsql
1.
upper(email) like upper(substr(first_name,1,1)||'.'||last_name)||'@%'
...
Рейтинг: 0 / 0
17.09.2018, 15:46
    #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
17.09.2018, 15:46
    #39703712
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помите пожалуйста с решением запроса
Egoryданную задачу http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
17.09.2018, 16:11
    #39703736
-2-
-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
17.09.2018, 16:15
    #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
17.09.2018, 16:21
    #39703743
julat21
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помите пожалуйста с решением запроса
-2-,???
...
Рейтинг: 0 / 0
17.09.2018, 18:36
    #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
18.09.2018, 09:54
    #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
30.09.2018, 15:17
    #39710536
Egory
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помите пожалуйста с решением запроса
Staxгрубо
если в "кляузе" like нет псевдосимволов %_, то он будет заменен на <> (не равно)

Спасибо, не знал. :)
...
Рейтинг: 0 / 0
30.09.2018, 15:31
    #39710538
SY
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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помите пожалуйста с решением запроса / 21 сообщений из 21, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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