powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка из БД "красивых" номеров
17 сообщений из 17, страница 1 из 1
Выборка из БД "красивых" номеров
    #39913210
Вадим17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,

Наверное задача для местных гуру простая, но мне не совсем понятно как её решить.
В таблице EVENTS указаны действия с некими номерами NUMBERS. Формат номера 11 значные, с форматом проблем нет.
Нужно вытащить все номера, у которых не считая префикса есть n одинаковых цифр подряд.
Например, при n=4 надо вытащить, например, такие номера: 7916 34 8888 1, 7977 2222 167, 7925 341 0000

То есть, нужна выборка номеров, в которых не считая префикса будет n одинаковых элементов.

PS Подобной темы не нашел, но если есть, прошу выслать.
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913223
feagor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вадим17,

where number like '%0000%' or number like '%1111%' or number like '%2222%'...
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913225
Вадим17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
feagor,

Спасибо, так сначала и делал, но требование как-то прописать именно маску Like %xxxx%
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913227
Dshedoo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
with q (val) as (select '79163488881' from dual union all
select '79772222167' from dual union all
select '79253410000' from dual union all
select '79123456789' from dual union all
select '71114511123' from dual)

select val from q
where regexp_like(val,'(\d)(\1){3,}')
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913229
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим17,

самое простое, в лоб
Код: 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.
-- генерим шаблон
select 'or regexp_like(c,'''||level||'{3}'')' as p from dual connect by level < 10
/
P
---------------------------------------------------------------
or regexp_like(c,'1{3}')
or regexp_like(c,'2{3}')
or regexp_like(c,'3{3}')
or regexp_like(c,'4{3}')
or regexp_like(c,'5{3}')
or regexp_like(c,'6{3}')
or regexp_like(c,'7{3}')
or regexp_like(c,'8{3}')
or regexp_like(c,'9{3}')


-- копируем в запрос, проверяем
with t1(n) as (
select level from dual connect by level < 1000
),t2 as (
select to_char(n,'09999') as c  from t1
)
select c from t2
where 1!=1
--or regexp_like(c,'0{3}')
or regexp_like(c,'1{3}')
or regexp_like(c,'2{3}')
or regexp_like(c,'3{3}')
or regexp_like(c,'4{3}')
or regexp_like(c,'5{3}')
or regexp_like(c,'6{3}')
or regexp_like(c,'7{3}')
or regexp_like(c,'8{3}')
or regexp_like(c,'9{3}')
/

C
------
 00111
 00222
 00333
 00444
 00555
 00666
 00777
 00888
 00999

9 rows selected.
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913233
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vadim Lejnin
Код: plsql
1.
-- генерим шаблон

Иногда лучше молчать, чем так "помогать".
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913234
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, шикарный прием!
работает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
with t1(n) as (
 select level from dual connect by level < 1000
 ),t2 as (
 select to_char(n,'09999') as c  from t1
 )
 select c from t2
 where
 regexp_like(c,'(\d)(\1){2}')
/
...
 00099
 00111
 00222
 00333
 00444
 00555
 00666
 00777
 00888
 00999

108 rows selected.
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913241
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dshedoo,
Вадим17


То есть, нужна выборка номеров, в которых не считая префикса будет n одинаковых элементов.



Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> ed
Wrote file afiedt.buf

  1  with q (val) as (select '79163488881' from dual union all
  2  select '77774511234' from dual)
  3  select val from q
  4* where regexp_like(val,'(\d)(\1){3,}')
SQL> /

VAL
-----------
79163488881
77774511234



.....
stax
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913468
Вадим17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vadim Lejnin,

Супер, спасибо!
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913620
Вадим17
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю сюда же или новую тему надо создавать. Но в той же таблице есть некие числовые значения:

1344295
4254295
3344312
9989899
2121212
0901200
0010900

И требуется, сделать выборку только тех значений, где количество уникальных цифр менее 4 (1-3).
То есть, в выдаче должно быть:
9989899
2121212
0010900

REGEXP_REPLACE позволяет сделать только частично, когда одинаковые цифры идут подряд. Для случая '2121212' не сработает.
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913623
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим17,

Сир,
Студентам, желающим помощи
HOWTO :: Как правильно задавать вопросы
Как мне оформить свое сообщение?

1) Полная постановка задачи (без сокращений)
2) Подготовьте тестовые данные, лучше в виде with
например (не ваш случай):

Код: plsql
1.
2.
3.
4.
5.
with tbl(col1,col2,col3) as (
select 1,'name1',to_date('11.02.1921','DD.MM.YYYY') from dual union all
select 2,'name2',to_date('11.02.1922','DD.MM.YYYY') from dual union all
)
select col2 from tbl...



2) Покажите что сделали, и что получили (не в пересказе)


3) Старайтесь не использовать screenshot, научитесь копировать и оформлять текст
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913628
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot Вадим17#22058716]требуется, сделать выборку только тех значений, где количество уникальных цифр менее 4 (1-3)./quot]Переведи в троичную систему и всех тех значений сделай выборку.
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913639
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим17,
развернуть цифры в столбик и count(distinct > n

.....
stax
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913643
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим17,

translate + length
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913653
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вадим17,

набрал
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
SQL> ed
Wrote file afiedt.buf

  1  with t (n) as (
  2  select '1344295' from dual union all
  3  select '4254295' from dual union all
  4  select '3344312' from dual union all
  5  select '9989899' from dual union all
  6  select '2121212' from dual union all
  7  select '0901200' from dual union all
  8  select '0010900' from dual )
  9  select * from t
 10  where exists (
 11  select 1 from dual d connect by level<=length(t.n)
 12* having count(distinct(substr(t.n,level,1)))<4)
SQL> /

N
-------
9989899
2121212
0010900



.....
stax
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913730
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax
Вадим17,
набрал

Код: plsql
1.
2.
3.
select n
  from t 
 where length(translate('0123456789', 'a'||n,'a' )) > 10-4
...
Рейтинг: 0 / 0
Выборка из БД "красивых" номеров
    #39913889
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymous
Stax
Вадим17,
набрал

Код: plsql
1.
2.
3.
select n
  from t 
 where length(translate('0123456789', 'a'||n,'a' )) > 10-4


спасибо
я встречал такое решение, но не запомнил , а искать было лень

подсчет количества уникальных значений в строке

.....
stax
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка из БД "красивых" номеров
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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