Как выбрать столбцы, имена которых начинаются с одинакового префикса? - PullRequest
0 голосов
/ 15 октября 2010

Используя PostgreSQL 8.1.11, есть способ выбрать набор столбцов, имена которых начинаются с одинакового префикса.

Предположим, у нас есть столбцы: PREFIX_col1, PREFIX_col2, ...

Можно ли сделать запрос вроде:

SELECT 'PREFIX_*' FROM mytable;

Что, конечно, не работает.

Ответы [ 4 ]

2 голосов
/ 25 июля 2017

information_schema.COLUMNS содержит все столбцы в вашей базе данных, поэтому вы можете запросить определенный шаблон в названии, например:

select column_name from information_schema.COLUMNS as c where c.TABLE_NAME = 'mytable' and c.COLUMN_NAME like 'PREFIX_%';
2 голосов
/ 15 октября 2010

Вам нужно будет построить запрос с помощью запроса и использовать EXECUTE.Его немного проще с 8,3+.Вот запрос, который будет работать на 8.1 и извлекает все столбцы, начиная с r% из таблицы фильмов

$$
DECLARE 
   qry  TEXT;
BEGIN
    SELECT 'SELECT ' || substr(cols, 2, length(cols) - 2) ||
      ' FROM film' INTO qry
    FROM (
        SELECT array(
            SELECT quote_ident(column_name::text)
            FROM information_schema.columns 
            WHERE table_schema = 'public'
              AND table_name = 'film'
              AND column_name LIKE 'r%'
            ORDER BY ordinal_position
        )::text cols 
        -- CAST text so we can just strip off {}s and have column list
    ) sub;

    EXECUTE qry;
END;
$$
1 голос
/ 15 октября 2010

Мне кажется, синтаксическое описание оператора SELECT в PostgreSQL 8.x не позволяет этого.Список SELECT должен быть выражением или списком выражений, и синтаксис для выражений , по-видимому, не допускает использование частичных имен столбцов с подстановочными символами.

Предоставляйте и наслаждайтесь.

0 голосов
/ 15 октября 2010

Вы можете различать исходные подстроки, находя их в http://sourceforge.net/projects/pgdiff/

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