簡體   English   中英

WHERE子句中的問題(不知道如何處理WHERE子句中DECODE()函數的結果)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM