格式化(X,D)影响MySQL

时间:2018-04-23 04:19:12

标签: mysql

我正在编写MySQL查询,在格式化输出时,我遇到了order by语句的问题。只要我没有使用格式,order by语句就能完美地工作,但是使用format函数会导致混乱的输出(值仍然正确,但顺序不正确)。

以下查询不是原始查询,但类似:

SELECT name, (sal +(sal*com) - max) AS Diff
FROM x NATURAL JOIN y
WHERE x.val1 > y.val2
ORDER BY Diff DESC;

输出是正确的,即最高差异和相关名称首先,然后是第二高,依此类推。

然后我使用以下查询格式化它:

SELECT name, FORMAT((sal +(sal*com) - max), 2) AS Diff
FROM x NATURAL JOIN y
WHERE x.val1 > y.val2
ORDER BY Diff DESC;

这给出了没有订单的输出。

有人可以帮我理解我出错的地方以及如何纠正这个问题吗?

1 个答案:

答案 0 :(得分:1)

问题是FORMAT会返回 text ,而不是数字,因此您将数字排序为文本,这意味着会出现字典规则。一种选择,虽然可能不完全符合您的要求,但可以使用ROUND代替:

SELECT name, ROUND(sal +(sal*com) - max, 2) AS Diff
FROM x
INNER JOIN y
    ON x.val1 > y.val2
ORDER BY Diff DESC;

如果您需要特定于区域设置的内容,例如货币符号或千位分隔符,请考虑在您的表示层中处理它。

相关问题