2009-06-26 69 views
0

我有一個非常簡單的PL/SQL查詢問題在WHERE子句(不知道我可以在WHERE子句解決從DECODE()函數的結果)

(...) 
DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE 
(...) 

如何申請使用WHERE子句上面的聲明,因爲當我使用類似的東西:

WHERE upper(VALUE) like 'SOMETHING' 

它給了我一個空記錄集(我絕對肯定有滿足這些要求的記錄)。

我不知道是否重要,但我從Excel工作簿中使用VBA和CreateObject("OracleInProcServer.XOraSession")調用此查詢。

回答

1

最簡單的解決方案是複製和粘貼。

WHERE upper(DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2)) like 'SOMETHING' 

SOMETHING不是LIKE雖然優秀的搜索模式。

+0

它的工作:)非常感謝你:)'東西'只是放在這裏,使這可讀。 – zeroDivisible 2009-06-26 09:44:20

1

DECODE函數的輸出可能是'---'table2.column2

這解碼相當於:

CASE upper(Table.Column) = 'SOMETHING' THEN '---' ELSE TABLE2.COLUMN2 END 

我猜你要篩選具有upper(TABLE.Column) = 'SOMETHING'行,在這種情況下,你可以使用:

WHERE upper(VALUE) = '---' 
5

與接受的問題解決方案是你必須寫出DECODE表達式兩次。這可能是一個維護問題,因爲它可能會導致表達式的兩個實例在某些時候會出現分歧。

另一種方法是嵌套查詢,以便直接在謂詞中使用DECODE的結果。

SELECT * FROM (
    SELECT DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE 
    FROM ... 
) 
    WHERE UPPER(value) LIKE 'X%' 
+0

您可能對此有所瞭解,但是...我是PL/SQL新手,對SQL有很少的瞭解。我只是選擇更簡單的解決方案。 – zeroDivisible 2009-06-26 13:23:31