0

我打算将我的数据从 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>...

我不知道该错误,并感谢任何提示。提前致谢。

4

1 回答 1

2

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

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

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

于 2018-03-13T04:48:20.737 回答