0
我寫了一個簡單的查詢來比較日期,但我在查詢的最後一行收到無效的標識符錯誤。我在下面得到以下錯誤。第15行恰好是查詢的最後一行。Oracle SQL Select
行錯誤:15列:6
Select OP_DATE,
ID,
TO_CHAR(DT.OP_DATES.LST_UPDT_TMSP,'DD-MM-YY') as SD
From DT.OP_DATES
Where OP_DATE_IND = 'CMPLTD'
And OP_DATE_STS = 'M'
And SD=(SELECT TO_CHAR(SYSDATE, 'DD-MM-YY') FROM DUAL)
有什麼不對的標識?
@BreenDeen-進一步解釋Aleksej的答案:它總是幫助思考一個SQL語句中的子句的評估順序。至少原則上,FROM子句(包括JOIN條件)和WHERE子句在其他任何事情之前被評估,而SELECT子句被評估接近結束。 SELECT子句中定義的別名對WHERE子句不可見。數據庫軟件的創建者可以自由地做其他事情(比如稍後定義的任何別名的「預讀」),但我不知道是否有這樣做的具體操作,當然Oracle不。 – mathguy
@BreenDeen - 作爲使用子查詢的替代方法,您可以在WHERE子句的左側重複整個TO_CHAR(DT.OP_DATES.LST_UPDT_TMSP,'DD-MM-YY'),而不是使用別名。這將避免子查詢外部查詢結構。它更加打字,但效率並不高。該函數在查詢中出現兩次,但實際上並未執行兩次。 Oracle引擎足夠聰明,可以看到它是相同的函數,所以它只計算一次(對於每一行)。 – mathguy
非常感謝! – BreenDeen