当前位置: 首页 > 知识库问答 >
问题:

在PostgreSQL中选择具有特定列名的列

廖弘量
2023-03-14

我想编写一个简单的查询来选择PostgreSQL中的许多列。但是,我一直收到错误-我尝试了几个选项,但它们对我不起作用。目前我收到以下错误:

组织。postgresql。util。PSQLException:错误:“列”处或附近出现语法错误

要获取具有值的列,请尝试以下操作:

select * from weather_data where column like '%2010%'

有什么想法吗?

共有3个答案

唐弘和
2023-03-14

尝试使用这样的动态结构通常表明您应该使用适合动态访问的数据格式,例如hstorejsonxml等。

您可以通过在应用程序中动态创建SQL来获取动态列列表。您可以查询INFORMATION_SCHEMA以获取有关表列的信息并构建查询。

可以在PL/PgSQL中执行此操作并使用EXECUTE运行生成的查询,但您会发现使用结果RECORD有点困难,因为您必须获取和解码复合元组,您不能将结果集扩展为普通列列表。观察:

craig=> CREATE OR REPLACE FUNCTION retrecset() returns setof record as $$
values (1,2,3,4), (10,11,12,13);
$$ language sql;

craig=> select retrecset();
   retrecset   
---------------
 (1,2,3,4)
 (10,11,12,13)
(2 rows)

craig=> select * from retrecset();
ERROR:  a column definition list is required for functions returning "record"

craig=> select (r).* FROM (select retrecset()) AS x(r);
ERROR:  record type has not been registered

您所能做的就是获取原始记录并在客户端中对其进行解码。您不能从SQL索引到它,也不能将其转换为其他任何内容,等等。大多数客户端API不提供解析匿名记录文本表示的工具,因此您可能必须自己编写。

因此:您可以在不知道结果类型的情况下从PL/PgSQL返回动态记录,这不是特别有用,而且在客户端处理起来很痛苦。您真的希望首先使用客户端生成查询。

隆扬
2023-03-14

这将为您提供特定表中的列列表(如果需要,您可以选择添加架构):

SELECT column_name
FROM information_schema.columns
WHERE table_name = 'yourtable'
  and column_name like '%2010%'

SQL小提琴演示

然后可以使用该查询创建动态sql语句以返回结果。

仲孙鸿畴
2023-03-14

列是保留字。除非使用双引号,否则不能将其用作标识符。例如:“列”

不过,这并不意味着你应该。只是不要使用保留词作为标识符。永远不要。

选择名称为2010的列列表:

.. 您可以使用此函数从系统目录表pg\u属性动态生成SQL命令:

CREATE OR REPLACE FUNCTION f_build_select(_tbl regclass, _pattern text)
  RETURNS text AS
$func$
    SELECT format('SELECT %s FROM %s'
                 , string_agg(quote_ident(attname), ', ')
                 , $1)
    FROM   pg_attribute 
    WHERE  attrelid = $1
    AND    attname LIKE ('%' || $2 || '%')
    AND    NOT attisdropped  -- no dropped (dead) columns
    AND    attnum > 0;       -- no system columns
$func$ LANGUAGE sql;

呼叫:

SELECT f_build_select('weather_data', '2010');

返回如下内容:

SELECT foo2010, bar2010_id, FROM weather_data;

您无法将其完全动态化,因为在实际构建查询之前,返回类型是未知的。

 类似资料:
  • 问题内容: 我想编写一个简单的查询来选择PostgreSQL中的许多列。但是,我不断收到错误-我尝试了一些选项,但它们对我没有用。目前,我收到以下错误: org.postgresql.util.PSQLException:错误:“列”处或附近的语法错误 要获取具有值的列,请尝试以下操作: 有任何想法吗? 问题答案: 是 保留字 。除非您双引号,否则不能将其用作标识符。像:。 不过,这并不意味着您应

  • 问题内容: test1 test2 test3 test4 如何选择班级名称为“ 名单的 最后一个孩子” ? 我知道上面的示例不起作用,但是有什么类似的方法可以起作用吗? 重要: a)我不能使用,因为它可能也排在第四或第五位。 b)没有JavaScript。 问题答案: 我建议您利用可以为一个元素分配多个类这样的事实: 最后一个元素具有与其兄弟姐妹相似的类,但也具有可用于设置所需的任何CSS属性的

  • 问题内容: 在SQL中,将行复制到另一个(备份)表中。如果备份表具有不同的结构(或不同的列名称),这可能吗?如果没有,实现此目标的最佳方法是什么? 这是我想做的:具有columns 。我想将一些行从该表复制到另一个具有column的表。内容进入,对等 问题答案: 该 列名 不事可言,只要该 数据类型 相匹配。 如果列的数据类型不匹配,请尝试相应地强制转换值。 只需尝试 使用小的虚拟表。确保明确列出

  • 我想显示“users”表中两个指定列“first_name”和“pic”的所有值。我正在尝试“Pulk”,但它在echo时显示为json格式。但我需要展示给大家看,一些东西——‘John pic’。求求你,有人帮帮我。这是我在“索引”中的示例代码。刀身php的吼声-

  • 问题内容: 这是我的基本表(显示为关联数组): 在另一个名为的表上,我可以添加多个属于一行的自定义数据。像这样: 我目前正在制作,但它只会增加,并给我行。我想要的是我的查询返回如下内容: 行值变成一列,而,它就是值。 我该怎么做? 问题答案: SELECT a.ID, a.Campaign_ID, a.FirstName, a.LastName, MAX(CASE WHEN b.data = ‘q

  • 问题内容: 给定此数据框,如何仅选择“ Col2”等于的行? 结果应该是这样的: 问题答案: 请尝试以下操作: