我有一张付款表,其中每条记录都有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
。
答案 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