【问题标题】:Mysql sort string as numberMysql将字符串排序为数字
【发布时间】:2021-11-22 11:46:05
【问题描述】:

我有一个这样的字段

    table A {text varchar(255) }

有这样的条目

    text => A$123.34
    text => A$10.34
    text => $15.45

我想对它们进行排序,以便它们列出

    A$10.34
    $15.45
    A$123.34

我已经尝试了许多在这里发布的解决方案 - 转换为十进制、值 * 1、值 + 0 等,但它们都失败了。我确实找到了一个非常接近的:

    select text as num from Table A order by substring(num,2) desc 

这给了

    A$10.34
    A$123.34
    $15.45

我知道这是因为子字符串正在查找两个字符,而最后一个条目只有一个,但我不知道如何解决这个问题。有谁知道如何按我的意愿排序?

在我看到的大多数帖子中,都说只将值存储为数字。这是不可能的,因为它需要在项目中进行大量更改。

【问题讨论】:

  • ORDER BY 0 + substring(num, 2)
  • 我会将 A$(或任何其他类型的前缀)保存在另一列中,然后按此新列+金额排序,然后将两者连接起来输出
  • 感谢您的建议,但如上所述,这不是一个选择。
  • 我尝试添加 0 + 建议,但它使列表的排序减少。我很感激这个建议。

标签: mysql string sorting


【解决方案1】:

使用SUBSTRING_INDEX():

mysql> select * from A order by 0 + substring_index(text, '$', -1);
+----------+
| text     |
+----------+
| A$10.34  |
| $15.45   |
| A$123.34 |
+----------+

【讨论】:

  • 谢谢比尔。这主要是这样做的。有一个条目为 1,205.54 美元,最终结果为第一个结果 (ASC) 或最后一个结果 (DESC)。有一个简单的解决方法吗?如果没有,那很好,因为我怀疑超过 999 的条目会很多。
  • 也许去掉逗号:substring_index(replace(text, ',', ''), '$', -1)
  • 完美运行。 :)
猜你喜欢
  • 2019-01-24
  • 2011-06-05
  • 2012-01-20
  • 2018-01-21
  • 2010-11-18
  • 1970-01-01
  • 2012-08-19
  • 2016-02-14
  • 1970-01-01
相关资源
最近更新 更多