如何在 PL SQL 中检查解码函数内的 2 个表达式
How to check 2 expressions inside a decode function in PL SQL
是否可以在 PL SQL 中检查 "Decode" 函数内的多个表达式。
我的要求基本上是
SELECT value1,
DECODE(Expression1 AND Expression2,
search1 , search2,
,'pass result',
'fail result') value2
FROM dual;
或者是否有解决方法?
最简单的答案是不要使用解码,而是使用 case 语句,例如
select 1 value1,
case when 'a' = 'a' and 'b' = 'b' then 'pass'
else 'fail'
end result
from dual;
VALUE1 RESULT
---------- ------
1 pass
可以使用 DECODE,但您必须使用嵌套的 DECODE,并且您最终会得到一些更难阅读、理解和维护的东西。如果您需要添加第三个条件会怎样?或者可能有多组结果会导致通过?你最终会得到一些真正可怕的东西去尝试和理解!
但是,如果您确实需要,这里有一个示例(以及相应的 CASE 表达式解决方案,(恕我直言)更容易阅读):
with sample_data AS (SELECT 1 ID, 'a' col1, 'b' col2 FROM dual UNION ALL
SELECT 2 ID, 'a' col1, 'c' col2 FROM dual UNION ALL
SELECT 3 ID, 'd' col1, 'b' col2 FROM dual UNION ALL
SELECT 4 ID, 'e' col1, 'f' col2 FROM dual)
SELECT ID,
CASE WHEN col1 = 'a' AND col2 = 'b' THEN 'pass'
ELSE 'fail'
END case_result,
DECODE(col1, 'a', DECODE(col2, 'b', 'pass',
'fail'),
'fail') decode_result
FROM sample_data;
ID CASE_RESULT DECODE_RESULT
---------- ----------- -------------
1 pass pass
2 fail fail
3 fail fail
4 fail fail
是否可以在 PL SQL 中检查 "Decode" 函数内的多个表达式。 我的要求基本上是
SELECT value1,
DECODE(Expression1 AND Expression2,
search1 , search2,
,'pass result',
'fail result') value2
FROM dual;
或者是否有解决方法?
最简单的答案是不要使用解码,而是使用 case 语句,例如
select 1 value1,
case when 'a' = 'a' and 'b' = 'b' then 'pass'
else 'fail'
end result
from dual;
VALUE1 RESULT
---------- ------
1 pass
可以使用 DECODE,但您必须使用嵌套的 DECODE,并且您最终会得到一些更难阅读、理解和维护的东西。如果您需要添加第三个条件会怎样?或者可能有多组结果会导致通过?你最终会得到一些真正可怕的东西去尝试和理解!
但是,如果您确实需要,这里有一个示例(以及相应的 CASE 表达式解决方案,(恕我直言)更容易阅读):
with sample_data AS (SELECT 1 ID, 'a' col1, 'b' col2 FROM dual UNION ALL
SELECT 2 ID, 'a' col1, 'c' col2 FROM dual UNION ALL
SELECT 3 ID, 'd' col1, 'b' col2 FROM dual UNION ALL
SELECT 4 ID, 'e' col1, 'f' col2 FROM dual)
SELECT ID,
CASE WHEN col1 = 'a' AND col2 = 'b' THEN 'pass'
ELSE 'fail'
END case_result,
DECODE(col1, 'a', DECODE(col2, 'b', 'pass',
'fail'),
'fail') decode_result
FROM sample_data;
ID CASE_RESULT DECODE_RESULT
---------- ----------- -------------
1 pass pass
2 fail fail
3 fail fail
4 fail fail