【问题标题】:Formatting MySQL results as currency [closed]将 MySQL 结果格式化为货币 [关闭]
【发布时间】:2020-12-27 07:00:40
【问题描述】:

将结果包含在美元符号中的最佳方式是什么?

我使用的是 CONCAT('£', SUM(Deposits)) AS TotalDeposits 之类的东西,但它似乎不起作用。

【问题讨论】:

  • 一般来说这样做不是一个好主意。格式化(例如添加货币符号)应该是您在显示数据的 UI 中而不是在原始查询中执行的操作
  • 简短回答:不要。在应用程序层中使用货币格式化数字。对于如何正确格式化货币的数字格式,MySQL 零线索,其中 $x,xxx.xx($x,xxx.xx)$x xxx,xxxx,xx$ 是某些语言环境如何处理它的。事情从那里变得更加陌生,所以忘记试图弄清楚这一点。找到一个可以处理它的本地化库,学习如何使用它,并让用户决定他们想要的方式。
  • 如果你想使用美元符号,为什么你的代码有一个井号?
  • “但它似乎不起作用”不会帮助我们帮助您。是什么让它“不工作”?什么是“不工作”?没有结果???结果错误???出错了???

标签: mysql sql mysql-function


【解决方案1】:

MySQL 拥有一个 FORMAT() function 用于进行数字格式化部分。

SET @amount := 123456.7890;
SELECT CONCAT('$',FORMAT(@amount,2,'en_US')),
       CONCAT('€',FORMAT(@amount,2,'de_DE'));

为您提供美国和德国格式。您必须自己输入货币符号; MySQL 的语言环境处理不会为您提供。

| ------------------------------------- | ------------------------------------- |
| $123,456.79                           | €123.456,79                           |
| ------------------------------------- | ------------------------------------- |

如果您处理的是其他人的钱,您可能希望使用像 DECIMAL(20,2) 这样的数据类型,而不是 FLOATDOUBLE,这样您就不会遇到浮点型算术舍入错误在 SUM() 等聚合函数中。

话虽如此:正如@ADyson 在他的评论中指出的那样,聪明的程序员经常在他们的应用程序而不是他们的数据库中处理这种格式。这是因为应用程序编程语言比数据库(至少是 MySQL)具有更完整的区域设置处理,并且您可以更好地控制它。

【讨论】:

    猜你喜欢
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多