我有一个相当简单的PL / SQL查询
(...)
DECODE(upper(Table.Column), 'SOMETHING', '---', TABLE2.COLUMN2) as VALUE
(...)
如何使用上面的语句应用WHERE子句,因为当我使用类似的东西时:
WHERE upper(VALUE) like 'SOMETHING'
它给了我一个空记录集(我绝对肯定有记录符合这些要求)。
我不知道这是否重要,但我在Excel工作簿中使用VBA和CreateObject("OracleInProcServer.XOraSession")
调用此查询。
答案 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) = '---'