【问题标题】:Natural sort doesn't arrange data properly自然排序不能正确排列数据
【发布时间】:2018-08-02 12:55:55
【问题描述】:

所以我有这组数据例如:

+--------------+-----------+
| Name         | Money     |
+--------------+-----------+
| Mickey Mouse | 1,000,780 |
+--------------+-----------+
| Donald Duck  | 1,580,870 |
+--------------+-----------+
| Goofy        | 230,570   |
+--------------+-----------+

当我使用时:

SELECT name, money FROM worth ORDER BY LENGTH(money), money

它仍然显示高飞而不是米奇和唐纳德。

当我使用时:

SELECT name, money FROM worth ORDER BY money +0 ASC

它仍然显示米奇而不是唐纳德。唐纳德应该在哪里。

我想按照 Donald-Mickey-Goofy 的降序排列。

【问题讨论】:

  • money是什么类型的列?
  • 如果钱栏是一个数字,请输入您的ORDER BY DESC。较高的值将位于顶部。
  • @skelwa 它的 varchar
  • @GcalD 修复它。

标签: mysql


【解决方案1】:

出于各种原因,将钱存储为 varchar 是一个坏主意 - 如果可能,请将其转换为更合适的格式。

否则,这个question 有答案。

【讨论】:

    【解决方案2】:

    我建议将“金钱”列存储为DecimalDouble 而不是VARCHAR。 但是对于您的情况,您可以先按长度降序,然后按金额降序排序。

    下面的查询应该适合你。

    SELECT name, money FROM worth ORDER BY LENGTH(money) desc, money desc;
    

    【讨论】:

      猜你喜欢
      • 2013-10-15
      • 2022-01-13
      • 2017-03-03
      • 2017-06-20
      • 2021-09-01
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多