[英]Problem in WHERE clause (don't know how I can address results from DECODE() function in WHERE clause)
我有一個相當簡單的PL / SQL查詢
(...)
DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE
(...)
我如何使用上面的語句應用WHERE子句,因為當我使用類似的東西時:
WHERE upper(VALUE) like 'SOMETHING'
它給了我一個空的記錄集(我絕對肯定有滿足這些要求的記錄)。
我不知道這是否重要,但是我正在使用VBA和CreateObject("OracleInProcServer.XOraSession")
在Excel工作簿中調用此查詢。
接受的解決方案的問題在於,您必須兩次寫出DECODE表達式。 這可能是一個維護問題,因為它使表達式的兩個實例在某個時候可能會發散。
另一種方法是嵌套查詢,以便您可以直接在謂詞中使用DECODE的結果。
SELECT * FROM (
SELECT DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE
FROM ...
)
WHERE UPPER(value) LIKE 'X%'
最簡單的解決方案是復制和粘貼。
WHERE upper(DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2)) like 'SOMETHING'
不過,對於LIKE
SOMETHING
並不是很好的搜索模式。
DECODE
函數的輸出將是'---'
或table2.column2
。
此解碼等效於:
CASE upper(Table.Column) = 'SOMETHING' THEN '---' ELSE TABLE2.COLUMN2 END
我猜你想過濾具有upper(TABLE.Column) = 'SOMETHING'
,在這種情況下,您將使用:
WHERE upper(VALUE) = '---'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.