【问题标题】:Oracle date compare( invalid identifier)Oracle 日期比较(无效标识符)
【发布时间】:2026-02-16 06:35:01
【问题描述】:

我有这个问题:

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 和 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”:无效标识符? 感谢您的帮助。

【问题讨论】:

    标签: sql oracle date ora-00904


    【解决方案1】:

    您不能在同一查询的 WHERE 子句中使用列别名。您必须重复它是别名的表达式:

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

    (注意这里不要使用 TO_CHAR,否则比较将无法正常工作)

    【讨论】: