在 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.20
、46.80
、23.50
和 54.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/