在MySQL中,如何在FORMAT()之后按数字顺序对字段排序?

在MySQL中,如何在FORMAT()之后按数字顺序对字段排序?,mysql,sql,Mysql,Sql,使用FORMAT()从结果中去掉一些不必要的小数位后,我无法按该字段正确排序,因为该字段现在是字符串而不是数字 对结果进行排序,然后删除小数位(或反之亦然),以便按照正确的数字顺序对结果进行排序的良好做法是什么 格式化前的结果 ORDER BY `Field` ASC *---------* | 1000.06 | | 2000.17 | | 3000.12 | | 10000.4 | | 20000.1 | | 30000.2 | *---------* *---------* | 1,

使用
FORMAT()
从结果中去掉一些不必要的小数位后,我无法按该字段正确排序,因为该字段现在是字符串而不是数字

对结果进行排序,然后删除小数位(或反之亦然),以便按照正确的数字顺序对结果进行排序的良好做法是什么


格式化前的结果

ORDER BY `Field` ASC

*---------*
| 1000.06 |
| 2000.17 |
| 3000.12 |
| 10000.4 |
| 20000.1 |
| 30000.2 |
*---------*
*---------*
| 1,000   |
| 2,000   |
| 3,000   |
| 10,000  |
| 20,000  | 
| 30,000  |
*---------* 
结果按数字排序,但需要删除不必要的小数位


格式化后的结果()

结果已删除小数点,但由于
FORMAT()
已将字段设置为字符串,因此它不是按我们要求的数字排序,而是按字母顺序排序


要求的结果

ORDER BY `Field` ASC

*---------*
| 1000.06 |
| 2000.17 |
| 3000.12 |
| 10000.4 |
| 20000.1 |
| 30000.2 |
*---------*
*---------*
| 1,000   |
| 2,000   |
| 3,000   |
| 10,000  |
| 20,000  | 
| 30,000  |
*---------* 

所需的结果是对结果进行数字排序并删除小数点

只需选择格式化值并按未格式化值排序即可

SELECT FORMAT(value, 0) FROM t ORDER BY value ASC

如果您只需要删除小数位就可以使用
格式
,只需去掉它,使用类似于
CAST(…AS signed)
的方法即可。

我应该说,我试着在它周围加一个
CAST()
,但这会导致错误。(前一行是
FORMAT(…,0)AS Field
变成
CAST(FORMAT(…,0)AS INTEGER)AS Field
,但这导致了错误。)因为我不确定这是否是在(即良好实践)中执行此操作的理想顺序,我想我会问。如果我说:你有一个数字,我理解正确吗。将其转换为字符串。是否要将其转换回数字并进行排序?我有一些不需要的小数位混乱的数字(例如
1000.00067
)。我需要删除小数位并按数字顺序正确排序。有人建议我使用
FORMAT()
删除小数位,但我不确定这是否与按数字顺序排序兼容,如果兼容,最好的做法是这样做。
1000.00067
-是数字还是字符串?您可以在
格式之前按值
排序。我的值是从其他字段派生的,所以它实际上更像是
((SUM(FieldOne))/(SUM(如果FieldTwo!=0,那么1,否则0结束))作为字段
-我不知道在这种情况下,当它更复杂的时候怎么做?抱歉,如果这是一个愚蠢的问题。我对此非常陌生。在我的情况下,它适用于我,选择…,格式(SUM(T.value),2)作为“总计”…来自表T…其中…按总和(T值)排序。。。