Преобразование значения в десятичное - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть столбец процентов, который сохраняет значения как целое число. Мне нужно рассчитать процент платежей из столбца платежей путем умножения на столбец процентов. В настоящее время моя таблица выглядит следующим образом:

+----+---------+---------+
| 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 Ответ

1 голос
/ 19 февраля 2020

Разделите на 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

дБ <> скрипка здесь


Есть ли другой способ [разделить на 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 <> fiddle здесь

...