MySQL - 如何使用存储的精度/比例将数字转换为十进制?

时间:2016-02-19 02:56:05

标签: mysql sql

我有一张付款表,其中每条记录都有currency_id。当我SELECT付款时,我想将值格式化为具有正确小数位数的小数。货币表有一个名为decimals的列。

SELECT p.sale
 , CONVERT(p.amount, DECIMAL(21,c.decimals)) as formatted_amount
FROM payment p 
JOIN currency c ON p.currency_id=c.id

当我这样做时,我得到Syntax error or access violation: 1064

2 个答案:

答案 0 :(得分:1)

DECIMAL(M,D)中的M和D只能是常数,如DECIMAL(5,2)。

答案 1 :(得分:0)

找到实现既定目标的唯一方法是使用这样的声明:

SELECT p.sale
, (CASE WHEN c.decimals=0 THEN CONVERT(p.amount,DECIMAL(21,0))
    WHEN c.decimals=1 THEN CONVERT(p.amount,DECIMAL(21,1))
    WHEN c.decimals=2 THEN CONVERT(p.amount,DECIMAL(21,2))
    ELSE p.amount END) as formatted_amount
FROM payment p 
JOIN currency c ON p.currency_id=c.id