使用PostgreSQL 8.1.11,有没有办法选择一组名称以相同前缀开头的列。
假设我们有列:PREFIX_col1,PREFIX_col2,...
是否可以执行以下请求:
SELECT 'PREFIX_*' FROM mytable;
这当然不起作用。
答案 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/