取整数位和小数点后的位数


今天有人问,怎么取一个数字的整数位,并且看他的小数点后有几位?
以下是这个sql:

sys@ORALOCAL(192.168.0.22)> SELECT trunc(&num) num_int,
 
2         CASE
 
3           WHEN abs(&num) >= 1 THEN
 
4            length('&num') - decode(instr(&num, '.'), 0, NULL, instr(&num, '.'))
 
5           ELSE
 
6            length('&num') - decode(instr(&num, '.'), 0, NULL, instr(&num, '.')) - 1
 
7         END num_of_after_dot
 
8    FROM dual;
输入
num 的值:  123.45
原值   
1: SELECT trunc(&num) num_int,
新值   
1: SELECT trunc(123.45) num_int,
输入
num 的值:  123.45
原值   
3:          WHEN abs(&num) >= 1 THEN
新值   
3:          WHEN abs(123.45) >= 1 THEN
输入
num 的值:  123.45
输入
num 的值:  123.45
输入
num 的值:  123.45
原值   
4:           length('&num') - decode(instr(&num, '.'), 0, NULL, instr(&num, '.'))
新值   
4:           length('123.45') - decode(instr(123.45, '.'), 0, NULL, instr(123.45, '.'))
输入
num 的值:  123.45
输入
num 的值:  123.45
输入
num 的值:  123.45
原值   
6:           length('&num') - decode(instr(&num, '.'), 0, NULL, instr(&num, '.')) - 1
新值   
6:           length('123.45') - decode(instr(123.45, '.'), 0, NULL, instr(123.45, '.')) - 1
 
  
NUM_INT NUM_OF_AFTER_DOT
--------
-- ----------------
      
123                2
 
已用时间: 
00: 00: 00.00
sys@ORALOCAL(192.168.0.22)>
sys@ORALOCAL(192.168.0.22)>
sys@ORALOCAL(192.168.0.22)>
sys@ORALOCAL(192.168.0.22)>
sys@ORALOCAL(192.168.0.22)> /
输入
num 的值:  0.232
原值   
1: SELECT trunc(&num) num_int,
新值   
1: SELECT trunc(0.232) num_int,
输入
num 的值:  0.232
原值   
3:          WHEN abs(&num) >= 1 THEN
新值   
3:          WHEN abs(0.232) >= 1 THEN
输入
num 的值:  0.232
输入
num 的值:  0.232
输入
num 的值:  0.232
原值   
4:           length('&num') - decode(instr(&num, '.'), 0, NULL, instr(&num, '.'))
新值   
4:           length('0.232') - decode(instr(0.232, '.'), 0, NULL, instr(0.232, '.'))
输入
num 的值:  0.232
输入
num 的值:  0.232
输入
num 的值:  0.232
原值   
6:           length('&num') - decode(instr(&num, '.'), 0, NULL, instr(&num, '.')) - 1
新值   
6:           length('0.232') - decode(instr(0.232, '.'), 0, NULL, instr(0.232, '.')) - 1
 
  
NUM_INT NUM_OF_AFTER_DOT
--------
-- ----------------
        
0                3
 
已用时间: 
00: 00: 00.03
sys@ORALOCAL(192.168.0.22)> /
输入
num 的值:  -234
原值   
1: SELECT trunc(&num) num_int,
新值   
1: SELECT trunc(-234) num_int,
输入
num 的值:  -234
原值   
3:          WHEN abs(&num) >= 1 THEN
新值   
3:          WHEN abs(-234) >= 1 THEN
输入
num 的值:  -234
输入
num 的值:  -234
输入
num 的值:  -234
原值   
4:           length('&num') - decode(instr(&num, '.'), 0, NULL, instr(&num, '.'))
新值   
4:           length('-234') - decode(instr(-234, '.'), 0, NULL, instr(-234, '.'))
输入
num 的值:  -234
输入
num 的值:  -234
输入
num 的值:  -234
原值   
6:           length('&num') - decode(instr(&num, '.'), 0, NULL, instr(&num, '.')) - 1
新值   
6:           length('-234') - decode(instr(-234, '.'), 0, NULL, instr(-234, '.')) - 1
 
  
NUM_INT NUM_OF_AFTER_DOT
--------
-- ----------------
      -
234
 
已用时间: 
00: 00: 00.03
sys@ORALOCAL(192.168.0.22)> -234

· 【文章发布信息】发表于: 2007-07-21 @ 00:42:02 · ||分类: Design & develop

留条评论