在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值)排序。。。