求任意一个数字在某一个序列中的位置
有一个步长一定的数字序列,例如步长是5,数字序列就是0,5,10,15,20,25.......现在给出任意一个数字看该数字更靠近那个,例如22介于20和25直接更靠近20,结果是20。这个问题来源于在做期权项目中计算期货合约是实值,虚值,还是平直。以下是SQL:
21:06:52 SCOTT@ orcl>var num number;
21:07:06 SCOTT@ orcl>exec :num:=99;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.00
21:07:15 SCOTT@ orcl>select case
21:07:41 2 when abs(m1 - :num) >= abs(m2 - :num) then
21:07:41 3 m2
21:07:41 4 else
21:07:41 5 m1
21:07:41 6 end result
21:07:41 7 from (select max(l) m1, max(l) - 5 m2
21:07:41 8 from (select level l from dual connect by level <= :num + 5)
21:07:41 9 where mod(l, 5) = 0);
RESULT
----------
100
已选择 1 行。
21:08:01 SCOTT@ orcl>exec :num:=77;
PL/SQL 过程已成功完成。
已用时间: 00: 00: 00.00
21:08:17 SCOTT@ orcl>/
RESULT
----------
75
已选择 1 行。
已用时间: 00: 00: 00.00
分类: Oracle SQL