powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Подсчитать количество телефонов в столбце, если в одной строке их несколько.По разделителю
8 сообщений из 8, страница 1 из 1
Подсчитать количество телефонов в столбце, если в одной строке их несколько.По разделителю
    #39616145
arelsom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый вечер!
Подскажите новичку. Есть столбец phones, где хранятся данные формата: 89111111111[2], 89112222222[3].
в некоторых столбцах указан только один номер.

Задача у меня такая - необходимо подсчитать, сколько всего номеров, просто через count здесь не идёт.

И есть ли возможность подсчитать среднее значение того, что находится в квадратных скобках?

Если кто-то имел дело с подобным, прошу объяснить и показать как надо. Заранее благодарен!
...
Рейтинг: 0 / 0
Подсчитать количество телефонов в столбце, если в одной строке их несколько.По разделителю
    #39616171
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну посчитай число зпт:

Код: plsql
1.
REGEXP_COUNT(phones,',') + 1


или

Код: plsql
1.
LENGTH(phones) - LENGTH(REPLACE(phones,',')) + 1



среднее значение того, что находится в квадратных скобках через XMLQUERY:

Код: 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.
with t as (
           select  phones,
                   regexp_count(phones,',') + 1 phone_count,
                   case regexp_count(phones,'\[')
                     when 0 then '()'
                     else '(0' || regexp_replace(phones,'(^|\])[^[]*(\[|$)','+') || '0) div ' || regexp_count(phones,'\[')
                   end avg_expr
             from  phone
          )
select  phones,
        phone_count,
        xmlcast(
                xmlquery(
                         avg_expr
                         returning content
                        )
                as number
               ) average
  from  t
/

PHONES                                             PHONE_COUNT    AVERAGE
-------------------------------------------------- ----------- ----------
89111111111[2], 89112222222[3]                               2        2.5
89111111111[7], 89112222222[3],89113333333                   3          5
89111111111                                                  1
89111111111, 89112222222,89113333333[4]                      3          4

SQL> 



SY.
...
Рейтинг: 0 / 0
Подсчитать количество телефонов в столбце, если в одной строке их несколько.По разделителю
    #39616180
Фотография Sayan Malakshinov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
arelsom,

крайне нежелательно разделять телефонные номера через запятую или точку с запятой, т.к. запятая означает паузу и при указании рабочего телефона с внутренним номером указывают внешний номер мини-АТС и через запятую внутренний номер
...
Рейтинг: 0 / 0
Подсчитать количество телефонов в столбце, если в одной строке их несколько.По разделителю
    #39617739
arelsom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SY,
спасибо!
к сожалению, способ с regexp_count не работает, так как стоит oracle 10g.
Не знаете, какие ещё есть варианты? Не могу найти в интернете.
...
Рейтинг: 0 / 0
Подсчитать количество телефонов в столбце, если в одной строке их несколько.По разделителю
    #39617745
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arelsomНе могу найти в интернете.Зачем ходить кругами? Так и скажи: "сделайте за меня".
...
Рейтинг: 0 / 0
Подсчитать количество телефонов в столбце, если в одной строке их несколько.По разделителю
    #39617805
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arelsomк сожалению, способ с regexp_count не работает, так как стоит oracle 10g.
Не знаете, какие ещё есть варианты? Не могу найти в интернете.

И что, так трудно сообразить?

Код: plsql
1.
regexp_count(phones,',') = length(phones) - length(replace(phones,','))



Что кстати приведено в моем ответе который ты похоже прочел по-диагонали.

SY.
...
Рейтинг: 0 / 0
Подсчитать количество телефонов в столбце, если в одной строке их несколько.По разделителю
    #39617950
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

89008007060[1],,86007008090[3]
Если там изначально хрень, то почему бы и не такая.
...
Рейтинг: 0 / 0
Подсчитать количество телефонов в столбце, если в одной строке их несколько.По разделителю
    #39618212
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env89008007060[1],,86007008090[3]
Если там изначально хрень, то почему бы и не такая.

Хрень должна отсекаться при вводе чтобы не тратить ресурсы каждый раз проверяя на хрень. Ну а так:

Код: plsql
1.
length(regexp_replace(phones,',*[^,]+,*','X'))



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


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