MYSQL: SELECT concat ('$ ' , SUM (`sale_price` )) 给出一个随机值

标签 mysql currency money-format

在 MYSQL 中:

SELECT 语句...

SELECT concat('$ ', SUM(`sale_price`) ) FROM `temp_table`

...给出随机输出值,而...

SELECT concat('$ ', FORMAT(SUM(`sale_price`), 2)) FROM `temp_table` 

...给出正确的输出。

为什么会发生这种情况?第一条语句有什么问题?

这是我在其上尝试这些语句的表的 SQL 代码。

SQL 代码:

-- phpMyAdmin SQL Dump
-- version 4.2.11
-- http://www.phpmyadmin.net
--
-- Host: 127.0.0.1
-- Generation Time: Apr 01, 2016 at 11:04 AM
-- Server version: 5.6.21
-- PHP Version: 5.6.3

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `book_shop`
--

-- --------------------------------------------------------

--
-- Table structure for table `temp_table`
--

CREATE TABLE IF NOT EXISTS `temp_table` (
`sale_price` decimal(8,2) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

--
-- Dumping data for table `temp_table`
--

INSERT INTO `temp_table` (`sale_price`) VALUES
('21.20'),
('46.80'),
('23.50'),
('54.70');

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

最佳答案

SELECT concat('$ ', SUM(`sale_price`) ) FROM `transactions`

...和...

SELECT concat('$ ', FORMAT(SUM(sale_price), 2)) FROM `transactions`

...做完全相同的事情,只是 FORMAT(... , 2) 确保您的销售价格格式为小数,后面有两位数字。(这是人类之间交易中货币值(value)通常使用的格式)。

如果没有 FORMAT(... , 2),销售价格的格式取决于数据库中销售价格的格式。

<小时/>

注释1

当我尝试...

SELECT concat('$ ', SUM(sale_price)) FROM test

...在包含值 21.2046.8023.5054.70 的测试表上在 sale_price 列中,我得到以下输出:

  • $ 146.20000076293945 如果我使用 FLOAT
  • $ 146.20 如果我使用类似 DECIMAL(10,2)

这些是两种情况下的预期结果。正如您所看到的,FLOAT 不太精确,因此应避免使用。

<小时/>

注释2

根据下面评论中提供的信息,您的 PHPMyAdmin 安装似乎存在问题。请卸载并重新安装(最好是不同的版本)。

关于MYSQL: SELECT concat ('$ ' , SUM (`sale_price` )) 给出一个随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36350757/

相关文章:

php - 字段列表中不存在未知列

gnuplot - gnuplot 标签中的逗号

mysql - 当前版本的核心(Drupal)存储在Drupal的哪个表中?

mysql - .CopyFromRecordset 正在截断粘贴到 Excel 中的数据

MySQL - 搜索一个字段两次

java - 在 System.out.format 中使用 NumberFormat 导入

PHP 和 Money,将钱转换为美分

ios - iOS Xcode 中的除法

java - 多线程、性能和精度考虑

java - 根据用户输入在文本框 asp.net 中自动添加货币值(value)分 (12,345.00 , 12,345.55)