【问题标题】:MySQLi SUM function with pound/dollar sign?带有英镑/美元符号的 MySQLi SUM 函数?
【发布时间】:2016-01-19 13:04:08
【问题描述】:

在我的管理面板中,我希望按周、月、年和总计查看所有利润和销售额。

到目前为止,我能够将ap_payment_logs 数据库中记录的事务显示到高级响应表中。在此上方是我试图显示每个保证金的利润:每周、每月、每年和总计。通过选择和计算列:txn_amount。

这一切都适用于添加到该列的普通数字,尽管我的网站的工作方式是在数字前添加一个英镑符号(£):

£10.00, £20.00, £50.00...

SUM 函数似乎不适用于这个磅符号,所以我想知道是否有任何简单的方法可以执行相同的计算来解决这个问题?这是我当前的代码:

$result = $conn->query('SELECT SUM(txn_amount) AS value_sum FROM `ap_payment_logs` WHERE `txn_date` >= NOW() - INTERVAL 7 DAY'); 
                $row = mysqli_fetch_assoc($result); 
                $sum = $row['value_sum'];
                echo $sum;

请注意:我无法删除添加的 £ 符号以实现我的结果。

提前致谢!

【问题讨论】:

  • 你为什么不使用实数而不是 varchars 作为数字......除非你删除 £ 它是一个不能被视为数字的字符串,因为它不是一个
  • 如果有帮助的话,我宁愿不必通过数千行代码来进行这种更改。但如果没有,我可能不得不这样做。
  • SELECT CONCAT('$', SUM(txn_amount)) AS value_sum FROM ap_payment_logs WHERE txn_date >= NOW() - 间隔 7 天
  • 货币值应始终存储为整数(最小单位,即便士),以减少浮点精度问题;并且仅使用小数和货币符号格式化以用于显示目的
  • 两种解决方案,如果你想保存这个标志,你可以使用像 £ 这样的html代码第二种解决方案是,如果您没有在 db 中插入此值而不是在查询中插入 concat。

标签: php sql mysqli currency


【解决方案1】:

有一个这样的表:

create table dummy (
   id int primary key auto_increment, 
   test varchar(10)
); 

以及表格中的这些行:

mysql> select * from dummy;
+----+---------+
| id | test    |
+----+---------+
|  1 | 10.0    |
|  2 | 14.0    |
|  3 | €14.0   |
+----+---------+

您可以使用以下 select 语句获得测试值的总和:

select sum(replace(test, '€', '')) from dummy;

无论如何,我建议像 Mark Ba​​ker 一样将您的数字列存储在数字字段中,因为这有几个优点(像 sum 这样的聚合更容易,排序工作......)。

【讨论】:

    猜你喜欢
    • 2012-03-26
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多