在WHERE过滤器中使用“选择回合”时出错

时间:2019-02-21 14:03:17

标签: oracle

我需要在代码中执行“ WHERE”过滤器,如下所示:

    "select
    round ((aust.DTH_DESENFORNAMENTO - aust.dth_enfornamento),7)*1440 as HF

    from
    qt_qts.res_tubo_austenitizacao aust

   WHERE
   HF between 'time1' and 'time2' <----------------- THE ERROR
   ")

但这表明在我的代码中无法识别HF。因此,我尝试输入全名(aust.DTH_DESENFORNAMENTO-aust.dth_enfornamento),但是它起作用了...但是,我需要输入完整的表达式,将时间转换为秒(((aust.DTH_DESENFORNAMENTO-aust.dth_enfornamento ),7)* 1440)。这样,就会出现错误,成为表达式的原因。

我正在使用ORACLE数据库

如何在代码没有错误的情况下适应HF时间?

1 个答案:

答案 0 :(得分:0)

在给定的SELECT子句中定义的

别名在同一级别的WHERE子句中不可用,因为后者在之前执行。您在这里有两个选择:您可以重复为其分配HF别名的表达式,也可以子查询。这是第一个选择:

SELECT
    ROUND((aust.DTH_DESENFORNAMENTO - aust.dth_enfornamento),7)*1440 AS HF
FROM qt_qts.res_tubo_austenitizacao aust
WHERE
    ROUND((aust.DTH_DESENFORNAMENTO - aust.dth_enfornamento),7)*1440
        BETWEEN 'time1' AND 'time2';

这是子查询选项:

WITH cte AS (
    SELECT
        ROUND((aust.DTH_DESENFORNAMENTO - aust.dth_enfornamento),7)*1440 AS HF
    FROM qt_qts.res_tubo_austenitizacao aust
)

SELECT HF
FROM cte
WHERE HF BETWEEN 'time1' AND 'time2';