如何选择名称以相同前缀开头的列?

时间:2010-10-15 09:53:10

标签: sql postgresql

使用PostgreSQL 8.1.11,有没有办法选择一组名称以相同前缀开头的列。

假设我们有列:PREFIX_col1,PREFIX_col2,...

是否可以执行以下请求:

SELECT 'PREFIX_*' FROM mytable;

这当然不起作用。

4 个答案:

答案 0 :(得分:2)

您将不得不使用查询构造查询并使用EXECUTE。它更容易w / 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 :(得分:1)

对我而言,the syntax description of PostgreSQL 8.x's SELECT statement似乎不允许这样做。 SELECT列表必须是表达式或表达式列表,expressions的语法似乎不允许使用通配符的部分列名。

分享并享受。

答案 2 :(得分:1)

information_schema.COLUMNS包含数据库中的所有列,因此您可以在名称中查询特定模式,如下所示:

select column_name from information_schema.COLUMNS as c where c.TABLE_NAME = 'mytable' and c.COLUMN_NAME like 'PREFIX_%';

答案 3 :(得分:0)

您可以将初始子字符串区分为http://sourceforge.net/projects/pgdiff/