Проверка на соответствие

Здравствуйте! Прошу помощи профессионалов и просто любителей.

SELECT hntgrp
FROM voip_hunt_groups
WHERE number=CAST('1209' AS varchar)
AND hntgrp=CAST('5' AS varchar) LIMIT 1;

результат поле hntgrp character varying(5) 5

Есть внешний номер с хантгруппой 5

Идет сопоставление, т.е. если передается не нулевое или не цифровое или не пустое значения, то перевод звонка разрешен

Так вот, пытаюсь реализовать такой вариант, когда внешний номер имеет несколько хантгрупп, записанных через запятую, т.е. так: 1,5,22

И тут возникает вопрос, как же можно сравнить 5 и (1,5,22,) на соответствие, отбросив все лишнее, в данном случае 1, 22 и запятые. Пробовал кучу вариантов и ничего в результате.

Остановился на этом варианте, но предполагаю, что я даже не в том направлении т.к. думаю тут поможет IF ELSE sql, но я в этом никак не могу разобраться ибо low skill

SELECT * 
FROM unnest(array[(SELECT CAST(hntgrp AS int)
  FROM extnums WHERE extnum~'4951112233')]) ok 
WHERE ok = any(array[(SELECT CAST(hntgrp AS int)
  FROM hunt_groups WHERE num='1209' AND hntgrp='5')]);

Возвращает поле integer со значением 5

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

А что мешает поискать

А что мешает поискать подстроку в строке или даже сделать LIKE типа "%,5,%"?

строки

Дело в том, что я пытаюсь найти соответствие сравнивая несколько строк character varying с данными записанными в одну строку.

т.е. первый запрос (1209) получает:
row| huntgrp |
1 | 5 |
2 | 1 |
3 | 44 |
4 | 9 |

а второй запрос (внешний номер):

row | huntgrp |
1 | 5,44 |

в обоих случаях huntgrp имеет тип character varying

с первым случаем

с первым случаем понятно:

SELECT CAST(array_to_string(array_agg(hntgrp), ',')AS character varying(50)) AS in_hg
FROM hunt_groups 
WHERE num='1209';

получим:

1
2
3

в
1,2,3

а вот как заставить интерпретатор преобразовать текстовый результат в числовой через запятую, что бы можно было бы сравнить эти результаты на соответствие?

Не правильная мысль, из

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

SELECT array_to_string(array_agg(hntgrp), ',') AS in_hg
FROM hunt_groups 
WHERE num='1209';

получим текст через запятую, а текст с текстом сравнивать уже удобнее!

п.с. мысли в слух =)

Помогите пожалуйстаSELECT

Помогите пожалуйста

SELECT string_to_array(array_to_string(array_agg(hntgrp), ','), ',') AS in_hg
FROM hunt_groups 
WHERE num='1209'
   UNION ALL
SELECT string_to_array(array_to_string(array_agg(t2.hntgrp), ','),',')
FROM extnums AS t2 WHERE t2.extnum~'8650';

в итоге получаю столбец с типом text[] и две строки, в которых нужно найти соответствие, причем 1 и 11, 3 и 35, 5 и 51 и т.п., в соответствие не входит

in_hg
1 {1,44,5}
2 {11,44}

Если будут у кого светлые мысли, прошу делитесь ими и своим опытом

а что не так?

а что не так?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023