专栏" date_norm"在Postgresql中不存在

时间:2018-03-13 02:53:24

标签: postgresql

我要将我的数据从sqlite3移植到PostgreSQL(版本10.1),但有些查询语句看起来与原件不兼容。例如,声明:

SELECT date+300 AS date_norm, close FROM History WHERE date_norm>1502681700;

在sqlite3中运行时,我得到了:

  

错误:列" date_norm"不存在

     

LINE 1:... T date + 300 AS date_norm,close FROM History WHERE date_norm> ...

我不知道错误,任何提示都表示赞赏。提前谢谢。

1 个答案:

答案 0 :(得分:2)

现有查询存在问题,需要更改。

SELECT "date"+300 AS date_norm, close 
FROM History
WHERE "date" > (1502681700-300);
  • 不能引用where子句中select子句中形成的column alias。 SQL的实际执行顺序与编写SQL查询的方式不同。实际上where子句是在select子句之前执行的,因此别名“date_norm”根本不被where子句理解。而是参考源列“日期”并相应地修改过滤方式,这里我只是从您使用的常量值中扣除了300.

此外,date是标准SQL(refer)中的“保留字”。您不应将保留字用作列名,或者应将该列名称引用为“日期”(例如select "date" from History)。虽然它不会在PostgreSQL中造成问题,但它是一个潜在的可移植性问题。