2010-10-15 56 views
-2

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

假设我们有一个栏目:PREFIX_col1,PREFIX_col2,...

是否有可能做这样的请求:

SELECT 'PREFIX_*' FROM mytable; 

这当然是行不通的。

+0

你可能构造函数建立查询,然后使用EXECUTE – Pointy 2010-10-15 14:22:43

+0

好主意,我会探索这种方式。 – Toto 2010-10-15 14:38:52

+0

*** 8.1 ***?真?你现在应该升级**。该版本早已得到不支持。顺便说一句:你的表结构似乎表明你的表没有正常化。你可能想考虑重新设计。 – 2012-09-20 11:04:58

回答

1

对我来说,它看起来像the syntax description of PostgreSQL 8.x's SELECT statement不允许这样。 SELECT列表必须是表达式或表达式列表,并且的语法似乎不允许通配部分列名称。

分享和享受。

+0

感谢您的回复,看起来你是对的。对我来说太糟糕了:-( – Toto 2010-10-15 14:36:52

2

您将不得不用查询构造查询并使用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; 
$$ 
0

使用此:

select column_name from information_schema.COLUMNS as c where c.TABLE_NAME = 'table_name' and c.COLUMN_NAME like '%pattern%'; 
+1

请理解,“仅限代码”的答案是不鼓励的 - 而是增加一点解释,然后阅读*格式化*您的输入! – GhostCat 2017-07-25 12:48:11

相关问题