powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / REPLACE ИЛИ REGEXP
16 сообщений из 16, страница 1 из 1
REPLACE ИЛИ REGEXP
    #39988794
Anton Polikarpov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, друзья.

Помогите пожалуйста сделать несколько задачек.

Таблица address_location

1. Найти адреса где нет никаких значений, пробел не учитываем и пустые строки с NULL не учитываем.

2.
Таблица phone_number

Найти клиентов, с типом телефона "мобильный", у которых в номере меньше 10 цифр
В номере нужно пропускать скобки, пробелы



Создание таблицы phone_number:

CREATE TABLE phone_number(
id integer,
mobile_phone varchar2(20),
city_phone varchar2(20),
fax_number varchar2(20)
);

Создание таблицы address_location:

CREATE TABLE address_location(
id integer,
address varchar2(50)
);


Входные значения:

Таблица phone_number

INSERT INTO phones (id, mobile_phone, city_phone, fax_number)
VALUES (1, '8(929)100-10-10', '8495100-10-10', '8495100-10-10');
INSERT INTO phones (id, mobile_phone, city_phone, fax_number)
VALUES (2, '8(930)200-20-20', '8495200-20-20', '8495200-20-20');
INSERT INTO phones (id, mobile_phone, city_phone, fax_number)
VALUES (3, '8(931)300-30-10', '8495300-10-10', '8495100-10-10');
INSERT INTO phones (id, mobile_phone, city_phone, fax_number)
VALUES (4, '8(932)400-40-10', '8495400-10-10', '8495100-10-10');
INSERT INTO phones (id, mobile_phone, city_phone, fax_number)
VALUES (5, '8(933)500-50-10', '8495500-10-10', '8495100-10-10');
INSERT INTO phones (id, mobile_phone, city_phone, fax_number)
VALUES (6, '8(934)600-60-10', '8495600-10-10', '8495100-10-10');
INSERT INTO phones (id, mobile_phone, city_phone, fax_number)
VALUES (7, '8(935)700-70-10', '8495700-10-10', '8495100-10-10');
INSERT INTO phones (id, mobile_phone, city_phone, fax_number)
VALUES (8, '8(936)800-80-', '8495800-10-10', '8495100-10-10');
INSERT INTO phones (id, mobile_phone, city_phone, fax_number)
VALUES (9, '8(937)900-10-9009', '8495900-10-10', '8495100-10-10');


Таблица address_location

INSERT INTO location (id, address)
VALUES (1, '');
INSERT INTO location (id, address)
VALUES (2, 'ul. Spasskaya, d.88, k.1');
INSERT INTO location (id, address)
VALUES (3, 'ul. Begovaya, d.121');
INSERT INTO location (id, address)
VALUES (4, 'ul. Klati-Tsetkina, d.4');
INSERT INTO location (id, address)
VALUES (5, 'ul. Dementeva, d.31');
INSERT INTO location (id, address)
VALUES (6,NULL);
INSERT INTO location (id, address)
VALUES (7,'per. Volokolamskiy, dom. 124');
INSERT INTO location (id, address)
VALUES (8,'ul. Pastirnaka');
INSERT INTO location (id, address)
VALUES (9,'per. Dvigateley , dom. 1');
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988848
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пустые строки, они же NULL, исключаем:

Код: plsql
1.
2.
select * from address_location
where address is not null;



где нет никаких значений

Тут, возможно, надо уточнить задачу.

Translate никогда не использовал, наверное, можно изящнее.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select mobile_phone, mobila1, mobila2, mobila3,
       (select address from address_location where id = m.id) adrress
 from (
select id,
       mobile_phone,
       replace(replace(replace(mobile_phone, '-'), '('), ')') mobila1,
       replace(translate(mobile_phone, '()-', '  '), ' ', '') mobila2,
       regexp_replace(mobile_phone, '\D') mobila3
       from phone_number
) m
-- where length(mobila1) < 10;
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988854
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmdmdm,
Код: plsql
1.
translate('8(936)800-80-','a()-','a')
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988862
Anton Polikarpov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

123йй,

select * from address_location
where address is not null; - НЕ NULL или NULL, где пробелы тоже считаются пустыми строками

со вторым запросом вообще не так...я имею ввиду он не запускается.
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988863
oragraf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Polikarpov,

1. trim()
2. лог давай, что как маленький
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988865
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Anton Polikarpov,

Название таблиц одно, а в инсерт - другое... Определись уж...
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988884
Anton Polikarpov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
xtender,

Приветствую. Спасибо что заметили.
Исправил.

Таблица address_location

INSERT INTO address_location(id, address)
VALUES (1, '');
INSERT INTO address_location(id, address)
VALUES (2, 'ul. Spasskaya, d.88, k.1');
INSERT INTO address_location(id, address)
VALUES (3, 'ul. Begovaya, d.121');
INSERT INTO address_location (id, address)
VALUES (4, 'ul. Klati-Tsetkina, d.4');
INSERT INTO address_location(id, address)
VALUES (5, 'ul. Dementeva, d.31');
INSERT INTO address_location(id, address)
VALUES (6,NULL);
INSERT INTO address_location(id, address)
VALUES (7,'per. Volokolamskiy, dom. 124');
INSERT INTO address_location (id, address)
VALUES (8,'ul. Pastirnaka');
INSERT INTO address_location (id, address)
VALUES (9,'per. Dvigateley , dom. 1');
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988885
Anton Polikarpov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
oragraf,

Приветствую :)
Да, мне друг тоже самое говорил, что в первом задании про адреса, используется trim.
Но что-то допереть не можем, как именно он тут используется.
Я читал про него, получается что он удаляет с начала и с конца строки пробелы, или сначала и с конца одновременно.

Пробел не учитываем, имелось ввиду, что надо вывести те значения где если есть пробел, null, или нет никаких пробелов, то эти значения нужно вывести.
Условно работнику поступает заявка, где нужно обзвонить всех клиентов у которых не заполнены адреса в анкете, чтобы это сделать их нужно сначала найти.
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988886
Anton Polikarpov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dmdmdm,

Копирую текст который чуть ниже в сообщениях.

авторПриветствую :)
Да, мне друг тоже самое говорил, что в первом задании про адреса, используется trim.
Но что-то допереть не можем, как именно он тут используется.
Я читал про него, получается что он удаляет с начала и с конца строки пробелы, или сначала и с конца одновременно.

Пробел не учитываем, имелось ввиду, что надо вывести те значения где если есть пробел, null, или нет никаких пробелов, то эти значения нужно вывести.
Условно работнику поступает заявка, где нужно обзвонить всех клиентов у которых не заполнены адреса в анкете, чтобы это сделать их нужно сначала найти.
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988902
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор1. Найти адреса где нет никаких значений, пробел не учитываем и пустые строки с NULL не учитываем.

Код: plsql
1.
2.
select * from address_location t
where regexp_like(t.address,'[:alnum:]')



автор2. Найти клиентов, с типом телефона "мобильный", у которых в номере меньше 10 цифр
В номере нужно пропускать скобки, пробелы

Код: plsql
1.
2.
select * from phone_number t
where regexp_substr(t.mobile_phone,'\d',1,10) is null
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39988904
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anton Polikarpov
dmdmdm,

Копирую текст который чуть ниже в сообщениях.

авторПриветствую :)
Да, мне друг тоже самое говорил, что в первом задании про адреса, используется trim.
Но что-то допереть не можем, как именно он тут используется.
Я читал про него, получается что он удаляет с начала и с конца строки пробелы, или сначала и с конца одновременно.

Пробел не учитываем, имелось ввиду, что надо вывести те значения где если есть пробел, null, или нет никаких пробелов, то эти значения нужно вывести.
Условно работнику поступает заявка, где нужно обзвонить всех клиентов у которых не заполнены адреса в анкете, чтобы это сделать их нужно сначала найти.


страшная тайна про как именно .. trim

Код: plsql
1.
2.
3.
4.
5.
with t0 as (
  select chr(32) as s from dual
)
select ltrim(s) from t0 
where ltrim(s) is null;
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39989054
rpovarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если список знаков помимо цифр известен и не будет меняться, то быстрее через replace или translate. Если же от пользователя может прилететь что угодно ("длинное тире", подчёркивания, буквы, etc.), то regexp надёжнее. Но тут надо учитывать, что на миллионах и десятках миллионов записей разница в скорости с regexp уже довольно заметна.
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39989083
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rpovarov
Если же от пользователя может прилететь что угодно ("длинное тире", подчёркивания, буквы, etc.), то regexp надёжнее.
кому как.
translate*2
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39989131
Anton Polikarpov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
orawish,

Привет.
Сегодня на одном из зарубежных форумов(st.of)
Паренек сделал так:
Код: plsql
1.
2.
SELECT * FROM address_t
WHERE TRIM(address_c) IS NULL;



Я так понял, что и это сработает правильно. Или есть все таки разница между вашим запросом и этим в плане выдачи аутпута?
Я пытался использовать ваш запрос, что-то у меня ничего не получилось.
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39989133
dmdmdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы для начала определитесь с требованиями.

НЕ NULL или NULL, где пробелы тоже считаются пустыми строками

непонятно совсем.

Пробелы посреди строки "999 телефон 000 " нужны или нет? Если пробелы есть , что с ними делать?
И т.д.
Входные данные, предполагаемые выходные данные.

Пустая строка и NULL в Oracle - одно и то же.
...
Рейтинг: 0 / 0
REPLACE ИЛИ REGEXP
    #39989158
Anton Polikarpov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Друзья. Всем спасибо за помощь.
Каждый из ваших советов, действительно помогли мне выполнить задачу.
Благодарю всех за участие и время которое вы использовали для помощи.
Берегите себя!
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / REPLACE ИЛИ REGEXP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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