将值转换为十进制

时间:2020-02-19 20:27:28

标签: sql oracle casting

我有一个百分比列,将值保存为整数。我需要通过乘以百分比列来计算来自支付列的支付百分比。目前,我的表格如下所示:

+----+---------+---------+
| ID | PAYMENT | PERCENT |   
+----+---------+---------+
|  1 |     500 |      15 |  
|  2 |      75 |       5 |   
|  3 |    1250 |      20 |   
+----+---------+---------+

我需要输出看起来如下:

+----+---------+---------+-------------+
| ID | PAYMENT | PERCENT |  COMMISSION |
+----+---------+---------+-------------+
|  1 |     500 |     .15 |          75 |
|  2 |      75 |     .05 |        3.75 |
|  3 |    1250 |     .20 |         250 |
+----+---------+---------+-------------+

我尝试了以下各种变体,将百分比列转换为小数:

cast(percent as numeric (5,2))
cast(percent as decimal(5,2)) 
to_char(percent,'9999.99')

1 个答案:

答案 0 :(得分:1)

除以100。

SELECT id,
       payment,
       percent / 100 AS percent,
       payment * percent / 100 AS commission
FROM   table_name;

因此,对于您的数据:

CREATE TABLE table_name ( id, payment, percent ) AS
SELECT 1,  500, 15 FROM DUAL UNION ALL
SELECT 2,   75,  5 FROM DUAL UNION ALL
SELECT 3, 1250, 20 FROM DUAL;

这将输出:

ID | PAYMENT | PERCENT | COMMISSION
-: | ------: | ------: | ---------:
 1 |     500 |     .15 |         75
 2 |      75 |     .05 |       3.75
 3 |    1250 |      .2 |        250

db <>提琴here


还有另一种方法[除以100]吗?

其中任何一个都可以工作:

SELECT id,
       percent / 100 AS opt1,
       percent * 0.01 AS opt2,
       TO_NUMBER( percent || 'e-2' ) AS opt3,
       percent * POWER( 10, -2 ) AS opt4,
       ROUND(POWER(10,LOG(10, percent)-2),2) AS opt5
FROM   table_name;

并输出:

ID | OPT1 | OPT2 | OPT3 | OPT4 | OPT5
-: | ---: | ---: | ---: | ---: | ---:
 1 |  .15 |  .15 |  .15 |  .15 |  .15
 2 |  .05 |  .05 |  .05 |  .05 |  .05
 3 |   .2 |   .2 |   .2 |   .2 |   .2

但是不要;只需使用最简单的方法即可。

db <>提琴here

相关问题