Sql 确保百分比介于0和1之间(包括0和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 ---------

我在条件表中有百分比:

我想选择这些值,但对其进行修改以将其表示为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
--------------- ----------------
          -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之间或类似值,从第一个位置进入该位置