2015-10-25 35 views
1

我有一个查询,我正在使用,在MySQL中工作正常,但在Postgres上有问题。我收到了一个语法错误,我确信它有一个简单的解决方案,但在这里找不到任何有关它的信息。在PostgreSQL查询的列名中转义字符?

很明显,问题与第一种情况下的数字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) + 

回答

2

使用双引号"逃脱标识符(在你的情况下,列名)包含数字:

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

精氨酸..我试过单引号!谢谢! – lcm

+0

@icm:这里是手册的相关链接:http://www.postgresql.org/docs/current/static/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS它总是付出代价来阅读它盲目尝试的东西;) –