表达式作为列和'没有这样的列'错误

时间:2012-11-12 15:34:13

标签: sql

我有简单的查询:

SELECT ((interest_step / 12) * 365 + (MOD(interest_step, 12) * 30)) AS "days"
FROM "negotiations"."addon" WHERE (days <= 72)

但是当我执行它时,我收到一个错误:列'days'不存在。

我该如何纠正?

2 个答案:

答案 0 :(得分:0)

请改为尝试:

SELECT * 
FROM
(
   SELECT
     ((interest_step / 12) * 365 + (MOD(interest_step, 12) * 30)) AS "days" 
   FROM "negotiations"."addon" 
) t
WHERE (days <= 72)

这是因为WHERE子句在SELECT子句之前执行,因此它不会看到别名days。你应该将它包含在子查询中。

答案 1 :(得分:0)

您无法在生成它的同一select语句中引用列别名,这为您提供了两个选择:

SELECT ((interest_step / 12) * 365 + (MOD(interest_step, 12) * 30)) AS "days"
FROM "negotiations"."addon" 
WHERE (((interest_step / 12) * 365 + (MOD(interest_step, 12) * 30)) <= 72)

SELECT *
FROM
(
  SELECT ((interest_step / 12) * 365 + (MOD(interest_step, 12) * 30)) AS "days"
  FROM "negotiations"."addon" 
) A
WHERE (days <= 72)