使用PostgreSQL 8.1.11,有没有办法选择一组名称以相同前缀开头的列。如何选择名称以相同前缀开头的列?
假设我们有一个栏目:PREFIX_col1,PREFIX_col2,...
是否有可能做这样的请求:
SELECT 'PREFIX_*' FROM mytable;
这当然是行不通的。
使用PostgreSQL 8.1.11,有没有办法选择一组名称以相同前缀开头的列。如何选择名称以相同前缀开头的列?
假设我们有一个栏目:PREFIX_col1,PREFIX_col2,...
是否有可能做这样的请求:
SELECT 'PREFIX_*' FROM mytable;
这当然是行不通的。
你可以diff的初始子发现它在http://sourceforge.net/projects/pgdiff/
感谢您的回应,但我不认为这可能对我的问题有用。 – Toto 2010-10-15 12:36:49
对我来说,它看起来像the syntax description of PostgreSQL 8.x's SELECT statement不允许这样。 SELECT列表必须是表达式或表达式列表,并且的语法似乎不允许通配部分列名称。
分享和享受。
感谢您的回复,看起来你是对的。对我来说太糟糕了:-( – Toto 2010-10-15 14:36:52
您将不得不用查询构造查询并使用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;
$$
使用此:
select column_name from information_schema.COLUMNS as c where c.TABLE_NAME = 'table_name' and c.COLUMN_NAME like '%pattern%';
请理解,“仅限代码”的答案是不鼓励的 - 而是增加一点解释,然后阅读*格式化*您的输入! – GhostCat 2017-07-25 12:48:11
你可能构造函数建立查询,然后使用EXECUTE – Pointy 2010-10-15 14:22:43
好主意,我会探索这种方式。 – Toto 2010-10-15 14:38:52
*** 8.1 ***?真?你现在应该升级**。该版本早已得到不支持。顺便说一句:你的表结构似乎表明你的表没有正常化。你可能想考虑重新设计。 – 2012-09-20 11:04:58