Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка из БД "красивых" номеров / 17 сообщений из 17, страница 1 из 1
13.01.2020, 13:47
    #39913210
Вадим17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД "красивых" номеров
Добрый день,

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

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

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

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

Спасибо, так сначала и делал, но требование как-то прописать именно маску Like %xxxx%
...
Рейтинг: 0 / 0
13.01.2020, 14:25
    #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
13.01.2020, 14:27
    #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
13.01.2020, 14:35
    #39913233
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД "красивых" номеров
Vadim Lejnin
Код: plsql
1.
-- генерим шаблон

Иногда лучше молчать, чем так "помогать".
...
Рейтинг: 0 / 0
13.01.2020, 14:36
    #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
13.01.2020, 14:52
    #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
14.01.2020, 08:16
    #39913468
Вадим17
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД "красивых" номеров
Vadim Lejnin,

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

1344295
4254295
3344312
9989899
2121212
0901200
0010900

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

REGEXP_REPLACE позволяет сделать только частично, когда одинаковые цифры идут подряд. Для случая '2121212' не сработает.
...
Рейтинг: 0 / 0
14.01.2020, 13:09
    #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
14.01.2020, 13:14
    #39913628
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД "красивых" номеров
[quot Вадим17#22058716]требуется, сделать выборку только тех значений, где количество уникальных цифр менее 4 (1-3)./quot]Переведи в троичную систему и всех тех значений сделай выборку.
...
Рейтинг: 0 / 0
14.01.2020, 13:46
    #39913639
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД "красивых" номеров
Вадим17,
развернуть цифры в столбик и count(distinct > n

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

translate + length
...
Рейтинг: 0 / 0
14.01.2020, 14:02
    #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
14.01.2020, 15:20
    #39913730
andrey_anonymous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД "красивых" номеров
Stax
Вадим17,
набрал

Код: plsql
1.
2.
3.
select n
  from t 
 where length(translate('0123456789', 'a'||n,'a' )) > 10-4
...
Рейтинг: 0 / 0
14.01.2020, 18:24
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выборка из БД "красивых" номеров / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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