在 sql 中重写大小写



嗨,我试图重写以下使用CASE WHEN的代码。我在想我可以使用解码或其他东西吗?

代码:

create table want as select 
case when (Var1<20 ) then 1 
when (40>Var1>=20 ) then 2 
when (Var1>=40 ) then 3 
else .
end as Var1

这更简单地写成:

create table want as
select (case when Var1 < 20 then 1 
when Var1 < 40 then 2 
when Var1 >= 40 then 3 
else NULL
end) as Var1

decode()只支持相等。当年引入case()时,我们欢迎它的原因之一正是因为它允许我们测试大于和小于。

但是,可以嵌套decode()调用并将它们与其他函数组合以实现相同的结果。这。。。

select id
, var1
, decode(greatest(var1,20), 20, 1, 
decode(least(var1,40), 40, 3, 2 )) as trans_var
from tab
/

。实现case()语句的逻辑:

select id
, var1
, (case when Var1 < 20 then 1 
when Var1 < 40 then 2 
when Var1 >= 40 then 3 
else NULL
end) as trans_var
from tab
/

SQL 小提琴演示。

最新更新