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

今天有人问,怎么取一个数字的整数位,并且看他的小数点后有几位?
以下是这个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

发表评论

电子邮件地址不会被公开。 必填项已用*标注

This site uses Akismet to reduce spam. Learn how your comment data is processed.