Ошибка при использовании «select round» в фильтре WHERE - PullRequest
0 голосов
/ 21 февраля 2019

Мне нужно сделать фильтр "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

Как я могу сослаться на время ВЧ без ошибки в моем коде?

1 Ответ

0 голосов
/ 21 февраля 2019

Псевдонимы, определенные в данном предложении 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';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...