我想获取特定日期的总帐单金额,但在我的数据库中,所有金额都插入了“£”符号。现在我想总结所有列值。任何人都可以帮我找出
例如:
我创建了一个名为order的表,列为id
,totamt
。在totamt
列中插入数据,例如浮点值。 £2.00
,£90.00
等......
我试图在sql查询中使用Sum函数添加值。它会增加值但总量是错误的。
答案 0 :(得分:0)
我想,正如评论中的其他人所猜测的那样,您的totamt
列的数据类型为VARCHAR()
,而不是您在问题中提到的FLOAT
数据类型。
要以最佳方式解决此问题,您应该重新编写数据库,以便totamt
列具有DECIMAL(12,2)
数据类型。为什么?正如您所发现的,字符串很难用于算术运算。此外,浮点运算有一些怪癖使其对货币价值不太好。
与此同时,您需要在查询中添加代码以编辑totamt
字符串,以便在将其提供给SUM()
操作之前看起来像数字。
这可能会让您转换价值。它会删除货币符号并将该金额表示为十进制值。
CONVERT(REPLACE(totamt,'£', ''), DECIMAL(12,2)) totamt
所以你可以这样做
SELECT SUM(CONVERT(REPLACE(totamt,'£', ''), DECIMAL(12,2))) grand_total,
id
FROM table
GROUP BY id