Fir*_*ame 1 sql oracle decode case
我有一个场景,我需要检查日期和值来确定结果。
前任-
case when my_date > '10-01-2011' and my_value = 0 then
'Do this'
else
'Do that'
end
Run Code Online (Sandbox Code Playgroud)
我试图在 oracle SQL 查询中使用它,我想知道是否有更好的方法来处理这个逻辑而不是使用 case 语句;也许使用 decode 或任何其他 oracle 函数。
CASE是 SQL 中条件逻辑的 ANSI SQL 标准。因此,您的代码很好,除了您隐式视为日期的字符串 '10-01-2011' 。我会为此使用 ANSIDATE文字格式:
case when my_date > date '2011-01-10' and my_value = 0 then
'Do this'
else
'Do that'
end
Run Code Online (Sandbox Code Playgroud)
DECODE之前是 Oracle 针对条件 SQL 的专有解决方案CASE。可以用DECODE这样的方式表达相同的逻辑:
decode (my_value,
0, decode (sign (my_date - date '2011-01-10'),
1,
'Do this',
'Do that'),
'Do that')
Run Code Online (Sandbox Code Playgroud)
不是很优雅或可读吗?它还使用该SIGN函数,该函数为正数返回 1,为负数返回 -1,为 0 返回 0。
另请注意,CASE可以在 PL/SQL 中使用而DECODE不能。
-- This works
myvar := case when x=1 then 'a' else 'b' end;
-- This doesn't
myvar := decode (x, 1, 'a', 'b');
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7115 次 |
| 最近记录: |