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