Цикл по массиву PostgreSQL в запросе SELECT, а не в функции PLPGSQL - PullRequest
3 голосов
/ 09 июля 2011

У меня есть столбец text [] ARRAY в таблице PostgreSQL, и мне нужно запустить char_length () для каждого элемента массива в запросе SELECT (обычный SQL, а не plpgsql), чтобы, если какой-либо из элементов больше 25 символов, SELECT возвращает 't' и 'f' в противном случае. Я знаю, что могу перебирать текст [] внутри пользовательской функции plpgsql, но по другим причинам мне нужно найти способ сделать это непосредственно в SQL.

Возможно ли это?

Ответы [ 2 ]

2 голосов
/ 09 июля 2011

Начиная с PostgreSQL 8.4, вы можете использовать функцию UNNEST:

SELECT MAX((char_length(string) > 25)::INT)::BOOLEAN
FROM (
    SELECT my_array,UNNEST(my_array) AS string
    FROM my_table
) AS x
GROUP BY my_array;
2 голосов
/ 09 июля 2011

Вы можете использовать unnest, чтобы открыть массив, а затем некоторые простые length и exists stuff:

select exists(
    select 1
    from (
        select unnest(ar) as x
        from table_name
    ) as t
    where length(x) > 25
)

Бизнес exists и select 1 - это просто удобный способ свернуть набор результатов в единое логическое значение (я уверен, что есть другие способы).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...