[英]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`
...給出正確的輸出。
為什么會發生這種情況? 第一個說法有什么問題?
這是我在其上嘗試這些語句的表的 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)
,銷售價格的格式取決於數據庫中銷售價格的格式。
當我嘗試...
SELECT concat('$ ', SUM(sale_price)) FROM test
...在包含列sale_price
中的值21.20
、 46.80
、 23.50
和54.70
的測試表上,我得到以下輸出:
$ 146.20000076293945
如果我使用FLOAT
DECIMAL(10,2)
類的東西, $ 146.20
這是兩種情況下的預期結果。 如您所見, FLOAT
不太精確,因此應避免使用。
根據下面評論中提供的信息,您的 PHPMyAdmin 安裝似乎有問題。 請卸載並重新安裝它(最好是不同的版本)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.