(Postgresql) Как получить все совпадения из массива целых чисел - PullRequest
0 голосов
/ 16 июня 2020

Я хочу, чтобы все строки совпадали с передачей group_id в качестве входных

например

Вот моя таблица: -

id |      name      | group_id 
----+----------------+----------
  1 | Alice John     | {1,2,3}
  2 | joshn shukla   | {1,4}
  3 | rishikesh jain | {2,8}

, когда я выполняю запрос ниже: -

select * from employee where group_id::TEXT ~ '[\{,]2,8[,\}]'

, тогда он возвращает результат:

 id |      name      | group_id 
----+----------------+----------
  3 | rishikesh jain | {2,8}

ожидаемый результат все соответствует: -

 id |      name      | group_id 
----+----------------+----------
  1 | Alice John     | {1,2,3}
  3 | rishikesh jain | {2,8}

, потому что 2 присутствует в обеих строках. любое решение?

Ответы [ 2 ]

0 голосов
/ 16 июня 2020

Другой вариант - использовать регулярные выражения для получения подстрок, разделенных запятыми, в виде строк, а затем извлекать цифры только с помощью

WITH t AS
(
 SELECT e.*, 
        regexp_replace(regexp_split_to_table(group_id, E','),'[^[:digit:]]','','g')::int
             AS num
   FROM employees e
)
SELECT DISTINCT id, group_id
  FROM t
 WHERE num IN (2,8) 

Demo

0 голосов
/ 16 июня 2020

Попробуйте:

select * from employee  where  (group_id  && '{2,8}');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...