2009-06-26 70 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