我正在编写MySQL查询,并且在格式化输出时,遇到了order by语句的问题。只要我不使用format,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;


这给出了没有顺序的输出。

有人可以帮我了解我要去哪里哪里以及如何解决该问题?

最佳答案

问题是FORMAT返回文本,而不是数字,因此您将数字排序为文本,这意味着将发生词典顺序。一种选择(虽然可能不完全是您想要的),而不是使用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;


如果需要特定于语言环境的内容,例如货币符号或千位分隔符,请考虑在表示层中进行处理。

关于mysql - 格式(X,D)在MySQL中影响顺序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49973369/

10-12 13:26