MySQL - 如何使用存储的 precision/scale 将数字转换为十进制?
MySQL - How to convert number to decimal using stored precision/scale?
我有 table 笔付款,其中每条记录都有 currency_id
。当我 SELECT
付款时,我想将值格式化为具有正确小数位数的小数。货币 table 有一个名为 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
。
DECIMAL(M,D)中的M和D只能是const数,如DECIMAL(5,2)。
发现实现既定目标的唯一方法是使用如下语句:
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
我有 table 笔付款,其中每条记录都有 currency_id
。当我 SELECT
付款时,我想将值格式化为具有正确小数位数的小数。货币 table 有一个名为 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
。
DECIMAL(M,D)中的M和D只能是const数,如DECIMAL(5,2)。
发现实现既定目标的唯一方法是使用如下语句:
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