2015-09-14 56 views
1

我與雙表產生如下天數的列表:選擇條件(ORA-00904:無效的標識符)

SELECT TO_CHAR (TO_DATE ('19-02-1984', 'DD-MM-RRRR') + LEVEL, 'DAY') DAY, 
     LEVEL 
    FROM DUAL 
CONNECT BY LEVEL <= 7 

而且它產生的表:

DAY  | LEVEL | 
----------------- 
MONDAY  1 
TUESDAY  2 
WEDNESDAY 3 
THURSDAY 4 
FRIDAY  5 
SATURDAY 6 
SUNDAY  7 

爲什麼不能選擇像WHERE WEEK_DAY ='SATURDAY'

SELECT TO_CHAR (TO_DATE ('19-02-1984', 'DD-MM-RRRR') + LEVEL, 'DAY') WEEK_DAY, 
     LEVEL 
    FROM DUAL 
WHERE WEEK_DAY = 'SATURDAY' 
CONNECT BY LEVEL <= 7 

它返回錯誤消息ORA-00904:無效的標識符,但我不明白爲什麼。

回答

0

基本上,您不能在WHERE子句中引用SELECT子句中的WEEK_DAY別名,因爲在評估WHERE子句的位置可能不知道它的值。這對你的查詢來說並不是什麼獨特的東西 - 它只是它的工作原理。

你有幾個選項...

選項1:從你的SELECT子句重現計算你的WHERE子句中:

SELECT TO_CHAR (TO_DATE ('19-02-1984', 'DD-MM-RRRR') + LEVEL, 'fmDAY') WEEK_DAY, LEVEL 
    FROM DUAL 
WHERE TO_CHAR (TO_DATE ('19-02-1984', 'DD-MM-RRRR') + LEVEL, 'fmDAY') = 'SATURDAY' 
CONNECT BY LEVEL <= 7 

選項2:查詢移入內聯視圖並將WHERE過濾器應用於此:

select * from (
    SELECT TO_CHAR (TO_DATE ('19-02-1984', 'DD-MM-RRRR') + LEVEL, 'fmDAY') WEEK_DAY, LEVEL LVL 
    FROM DUAL 
    CONNECT BY LEVEL <= 7) 
where WEEK_DAY = 'SATURDAY' 

注意t帽子我也在to_char()函數中使用了fmDay,所以在日期名稱中沒有額外的填充。