MYSQL: SELECT concat('$', SUM(`sale_price`)) 给出一个随机值
MYSQL: SELECT concat('$ ', SUM(`sale_price`)) gives a random value
在MYSQL中:
SELECT 声明 ...
SELECT concat('$ ', SUM(`sale_price`) ) FROM `temp_table`
...给出随机输出值,而...
SELECT concat('$ ', FORMAT(SUM(`sale_price`), 2)) FROM `temp_table`
...给出正确的输出。
为什么会这样?第一条语句有什么问题?
这是我在其上尝试这些语句的 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)
确保您的销售价格格式为小数,在 .
后面有两位数字(这是通常用于货币值的格式在人与人之间的交易中)。
如果没有FORMAT(... , 2)
,您的销售价格格式取决于数据库中的销售价格格式。
注释 1
当我尝试...
SELECT concat('$ ', SUM(sale_price)) FROM test
...在包含值 21.20
、46.80
、23.50
和 54.70
的测试 table 中 sale_price
, 我得到以下输出:
$ 146.20000076293945
如果我使用 FLOAT
$ 146.20
如果我使用 DECIMAL(10,2)
这两种情况都是预期的结果。如您所见,FLOAT
不太精确,因此应避免使用。
注2
根据下面评论中提供的信息,您的 PHPMyAdmin 安装似乎有问题。请卸载并重新安装(最好是不同的版本)。
在MYSQL中:
SELECT 声明 ...
SELECT concat('$ ', SUM(`sale_price`) ) FROM `temp_table`
...给出随机输出值,而...
SELECT concat('$ ', FORMAT(SUM(`sale_price`), 2)) FROM `temp_table`
...给出正确的输出。
为什么会这样?第一条语句有什么问题?
这是我在其上尝试这些语句的 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)
确保您的销售价格格式为小数,在 .
后面有两位数字(这是通常用于货币值的格式在人与人之间的交易中)。
如果没有FORMAT(... , 2)
,您的销售价格格式取决于数据库中的销售价格格式。
注释 1
当我尝试...
SELECT concat('$ ', SUM(sale_price)) FROM test
...在包含值 21.20
、46.80
、23.50
和 54.70
的测试 table 中 sale_price
, 我得到以下输出:
$ 146.20000076293945
如果我使用FLOAT
$ 146.20
如果我使用DECIMAL(10,2)
这两种情况都是预期的结果。如您所见,FLOAT
不太精确,因此应避免使用。
注2
根据下面评论中提供的信息,您的 PHPMyAdmin 安装似乎有问题。请卸载并重新安装(最好是不同的版本)。