0

在 MYSQL 中:

选择语句...

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 */;
4

1 回答 1

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

... 和 ...

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

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

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


注1

当我尝试...

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

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

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

这些是两种情况下的预期结果。如您所见,FLOAT精度较低,因此应避免使用。


笔记2

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

于 2016-04-01T07:52:01.723 回答