Сравнение дат Oracle (неверный идентификатор) - PullRequest
2 голосов
/ 27 мая 2011

У меня есть этот запрос:

SELECT TO_CHAR(HON.CREATE_DT,'DD-MM-YYYY') as CREATE_DT, 
       HON.ACCOUNT_NO,(SELECT TO_CHAR(CURRENT_DATE - INTERVAL '7' DAY, 'DD-MM-YYYY') FROM DUAL) AS NV
              FROM medium.HONSCRIBERS HON, 
                   medium.HONSCRIBER_TEXT pcode, 
                   medium.ACCESS_NUMBERS accnr
              WHERE 
                accnr.STATUS_CD = 'CU' AND
                pcode.TRADING_AS ='7777777'AND
                HON.ACCOUNT_NO=pcode.ACCOUNT_NO AND
                HON.ACCOUNT_NO=accnr.ACCOUNT_NO 

Возвращает:

[0] => Array
        (
            [CREATE_DT] => 28-02-2008
            [ACCOUNT_NO] => 20340322
            [NV] => 20-05-2011
        )

    [1] => Array
        (
            [CREATE_DT] => 28-02-2008
            [ACCOUNT_NO] => 20340322
            [NV] => 20-05-2011
        )

Мне нужно сравнить даты CREATE_DT AND NV Мой запрос:

SELECT TO_CHAR(HON.CREATE_DT,'DD-MM-YYYY') as CREATE_DT, 
       HON.ACCOUNT_NO,(SELECT TO_CHAR(CURRENT_DATE - INTERVAL '7' DAY, 'DD-MM-YYYY') FROM DUAL) AS NV
              FROM medium.HONSCRIBERS HON, 
                   medium.HONSCRIBER_TEXT pcode, 
                   medium.ACCESS_NUMBERS accnr
              WHERE 
                accnr.STATUS_CD = 'CU' AND          CREATE_DT < NV AND
                pcode.TRADING_AS ='7777777'AND
                HON.ACCOUNT_NO=pcode.ACCOUNT_NO AND
                HON.ACCOUNT_NO=accnr.ACCOUNT_NO

У меня есть эта ошибка:

[code] => 904
 [message] => ORA-00904: "NV": invalid identifier
 [offset] => 325

Почему он всегда писал мне: «NV»: неверный идентификатор?Спасибо за помощь.

1 Ответ

5 голосов
/ 27 мая 2011

Нельзя использовать псевдоним столбца в предложении WHERE того же запроса.Вы должны повторить выражение, для которого это псевдоним:

AND CREATE_DT < (CURRENT_DATE - INTERVAL '7' DAY)

(обратите внимание, что здесь вам не нужен TO_CHAR, иначе сравнение не будет работать корректно)

...