我正在构建一个查询,该查询需要将两个字段的相乘结果作为货币值输出。 0.00-9999.99。
我已经尝试了几种建议的解决方案,到目前为止,它们要么给出语法错误,要么将四舍五入为无小数的整数
我需要将乘法结果与格式化结果分开吗?
我当前的查询。
mysql> SELECT b.RowNumber,b.Email, z.PriceMultiplier * p.Price
-> FROM Production p JOIN Performace pe ON p.Title = pe.Title
-> JOIN Booking b ON b.PerfDate = pe.PerfDate AND b.Perftime = pe.PerfTime
-> JOIN Seat s ON s.RowNumber = b.RowNumber
-> JOIN Zone z ON z.Name = s.Zone;
+-----------+----------------------+-----------------------------+
| RowNumber | Email | z.PriceMultiplier * p.Price |
+-----------+----------------------+-----------------------------+
| Z16 | Jane.Dot@live.com | 60 |
| Z18 | ZP@email.com | 60 |
| Z19 | ZP@email.com | 60 |
| U19 | Jane.Dot@live.com | 26.999999284744263 |
| U20 | Jane.Dot@live.com | 26.999999284744263 |
| X13 | Mike.Stand@email.com | 26.999999284744263 |
| X14 | Mike.Stand@email.com | 26.999999284744263 |
| Z19 | qvf3@live.com | 60 |
+-----------+----------------------+-----------------------------+
数据类型-PriceMultiplier FLOAT不为空,价格DECIMAL(6,2)不为空
似乎最推荐使用TRUNCATE命令,但是它是四舍五入的
26.999999284744263-应该变成26.99而不是27
答案 0 :(得分:1)
您需要功能TRUNCATE()
:
TRUNCATE(p.BasicTicketPrice * z.PriceMultiplier, 2)
例如:
select truncate(26.999999284744263, 2)
返回
26.99
答案 1 :(得分:0)
在查询中使用MySQL的Round函数-ROUND(数字,小数)
例如选择产品名称,价格,ROUND(价格,1)AS取整价格 FROM产品; -摘自https://www.w3schools.com/sql/func_mysql_round.asp
对于您的特定查询,请尝试类似
SELECT b.RowNumber, b.Email, ROUND(p.BasicTicketPrice * z.PriceMultiplier,2) AS Price FROM Booking b
JOIN Performance pe ON pe.PerfDate = b.PerfDate AND b.PerfTime = pe.PerfTime
JOIN Production p ON pe.Title = p.Title JOIN Seat s ON b.RowNumber = s.RowNumber
JOIN Zone z ON s.Zone = z.Name WHERE s.Zone = z.Name;
截断还会给出您想要的答案
SELECT Truncate(26.999999284744263, 2);
26.99
祝你学习顺利
答案 2 :(得分:0)
将两种数据类型都设置为“浮动”后。
PriceMultiplier FLOAT NOT NULL和Price FLOAT NOT NULL
截断有效,不取整。
U19 | Jane.Dot@live.com | 26.99 |