在 PostgreSQL 查询中转义列名中的字符?

Posted

技术标签:

【中文标题】在 PostgreSQL 查询中转义列名中的字符?【英文标题】:Escaping characters in column names in a PostgreSQL query? 【发布时间】:2015-10-25 00:00:09 【问题描述】:

我有一个正在使用的查询,它在 mysql 中运行良好,但在 Postgres 上运行时出现问题。我收到一个语法错误,我确信有一个简单的解决方案,但在这里找不到任何关于它的信息。

很明显,问题与第一种情况下的数字 1 有关。

SELECT *, 
(
 (case when 1stFarmers > 0 THEN 1 ELSE 0 END) +
  (case when OldMcDonald > 0 THEN 1 ELSE 0 END) +
   (case when NewMcDonald > 0 THEN 1 ELSE 0 END) 

) as num_fruits

FROM (SELECT
  fruit, sum(farmers),
  sum(case when farmer = '1stFarmers' then harvest_count else 0 end) AS 1stFarmers,
  sum(case when farmer = 'OldMcDonald' then harvest_count else 0 end) AS Old_McDonald,
  sum(case when farmer = 'NewMcDonald' then harvest_count else 0 end) AS New_McDonald
FROM fruits
GROUP BY
  farmer) ft

我回来的错误:

syntax error at or near "stFarmers"
  Position: 27
(
 (case when 1stFarmers > 0 THEN 1 ELSE 0 END) +
             ^
  (case when OldMcDonald > 0 THEN 1 ELSE 0 END) +

【问题讨论】:

【参考方案1】:

使用双引号 " 转义包含数字的标识符(在您的情况下为列名):

(case when "1stFarmers" > 0 THEN 1 ELSE 0 END) +

【讨论】:

@icm:这是手册的相关链接:postgresql.org/docs/current/static/… 阅读它总是值得的,而不是盲目地尝试;)

以上是关于在 PostgreSQL 查询中转义列名中的字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Pyspark 的动态列列表中转义列名

在JAX-RS中的查询参数中转义`%`符号

在数据库查询字符串中转义引号的好方法?

在 Java 中转义 MySQL 字符串...没有准备好的语句

Postgresql在where子句中转义单引号[重复]

如何在仪表板变量中转义列名称