WHERE子句中的问题(不知道如何在WHERE子句中解决来自DECODE()函数的结果)

时间:2009-06-26 09:31:00

标签: database oracle excel vba plsql

我有一个相当简单的PL / SQL查询

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

如何使用上面的语句应用WHERE子句,因为当我使用类似的东西时:

WHERE upper(VALUE) like 'SOMETHING'

它给了我一个空记录集(我绝对肯定有记录符合这些要求)。

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

3 个答案:

答案 0 :(得分:5)

接受的解决方案的问题是您必须两次写出DECODE表达式。这可能是一个维护问题,因为它打开了表达式的两个实例在某些时候会出现分歧的可能性。

另一种方法是嵌套查询,以便您可以直接在谓词中使用DECODE的结果。

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

答案 1 :(得分:1)

最简单的解决方案是复制和粘贴。

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

SOMETHING不是LIKE的良好搜索模式。

答案 2 :(得分:1)

DECODE函数的输出可以是'---'table2.column2

此解码相当于:

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

我猜你要过滤那些有upper(TABLE.Column) = 'SOMETHING'的行,在这种情况下你会使用:

WHERE upper(VALUE) = '---'