0

我有一个包含帐户余额的 MySQL 表,该表存储为浮点数,有两位小数,varbinary列类型(因为值是 AES_ENCRYPTED)。

我意识到将值存储为浮点数并不理想,并且在以后的表中它们不再是,但我还不能对这个遗留表做任何事情,所以需要按原样使用它。

我正在尝试计算所有余额的总和,我可以使用下面的代码来完成:

$s=$dbh->prepare("
    SELECT
        SUM(AES_DECRYPT(a.acct_balance, '".DBKEY."'))   AS tBal
    FROM
        accounts a
    INNER JOIN
        coa c
    ON
        a.acc_id = c.acc_id
    WHERE
        c.acc_type_id = ?
    AND
        a.acc_type = 1
");

但是,一些报告还会将余额单独显示为零小数位,如果将它们相加,您通常会得到与上述查询不同的结果,该查询使用两位小数的值计算,即使在将结果转换为零位小数后也是如此。

我想我需要通知 MySQL 在将每个值添加到运行总数之前将其临时转换为零小数位,但我该怎么做呢?

我在报告中显示的值使用以下方法转换:

$val = number_format($val, 0, '', ',');
4

2 回答 2

1

您可以尝试 ROUND 功能,如

ROUND(SUM(AES_DECRYPT(a.acct_balance, '".DBKEY."')))
于 2013-04-20T04:58:27.670 回答
1

可能就这么简单?

SUM(ROUND(AES_DECRYPT(a.acct_balance, '".DBKEY."')))

这将得出四舍五入值的总和

于 2013-04-20T05:00:33.643 回答