Sql 确保百分比介于0和1之间(包括0和1)(使用单个函数)
我在条件表中有百分比: 我想选择这些值,但对其进行修改以将其表示为0到1(含0和1)之间的百分比: 将-0.01转换为0 保持现状 让1保持原样 将1.1转换为1 我可以使用和功能成功完成此操作:Sql 确保百分比介于0和1之间(包括0和1)(使用单个函数),sql,oracle,math,select,oracle12c,Sql,Oracle,Math,Select,Oracle12c,我在条件表中有百分比: 我想选择这些值,但对其进行修改以将其表示为0到1(含0和1)之间的百分比: 将-0.01转换为0 保持现状 让1保持原样 将1.1转换为1 我可以使用和功能成功完成此操作: select percent_decimal, least(1,greatest(0,percent_decimal)) as percent_modified from condition PERCENT_DECIMAL PERCENT_MODIFIED ---------
select
percent_decimal,
least(1,greatest(0,percent_decimal)) as percent_modified
from
condition
PERCENT_DECIMAL PERCENT_MODIFIED
--------------- ----------------
-0.01 0
.1 .1
1 1
1.1 1
但是,我想知道是否有一种更简洁的方法可以用一个函数来实现这一点 您可以使用单格表达式:
select
percent_decimal,
case when percent_decimal < 0 then 0
when percent_decimal > 1 then 1
else percent_decimal
end as percent_modified
from
condition
/
PERCENT_DECIMAL PERCENT_MODIFIED
--------------- ----------------
-0.01 0
.1 .1
1 1
1.1 1
它更长,但不使用任何函数,我认为后面的人更清楚您的逻辑是什么。您可以使用一个大小写表达式:
select
percent_decimal,
case when percent_decimal < 0 then 0
when percent_decimal > 1 then 1
else percent_decimal
end as percent_modified
from
condition
/
PERCENT_DECIMAL PERCENT_MODIFIED
--------------- ----------------
-0.01 0
.1 .1
1 1
1.1 1
它更长,但不使用函数,我认为稍后有人会更清楚您的逻辑是什么。也许可以考虑另一种方法-首先使用检查约束alter table CONDICTION add constraint chk check percent_decimal介于0和1之间,或者类似的方法来阻止数据进入。也许可以考虑另一种方法-停止数据通过检查约束alter table CONDICTION add constraint chk check percent_decimal介于0和1之间或类似值,从第一个位置进入该位置