mysql中影响order by的格式(x,d)

ogq8wdun  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(318)

我在编写mysql查询时,在格式化输出时,遇到了orderby语句的问题。只要我没有使用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;

这就给出了一个没有顺序的输出。
有人能帮我理解我哪里出了问题,以及我如何纠正这个问题吗?

ndasle7k

ndasle7k1#

问题是 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;

如果您需要特定于语言环境的东西,比如货币符号或千位分隔符,请考虑在表示层中处理它们。

相关问题