【问题标题】:mysql sort by number with dotsmysql按带点的数字排序
【发布时间】:2019-08-26 01:10:01
【问题描述】:

我有一个名为 title 的列,其中包含行:

  • 1.8.8
  • 1.8.9
  • 1.9.1
  • 1.9.2
  • 1.8.10

我需要这样的排序

  • 1.8.8
  • 1.8.9
  • 1.8.10
  • 1.9.1
  • 1.9.2

有什么办法吗? (列类型为 varchar)

【问题讨论】:

标签: mysql


【解决方案1】:

笨拙,但如果您的所有条目都采用 x.x.x 格式,则应该可以工作:

select yourColumn
from yourTable
order by
cast(substring_index(yourColumn,'.',1) as unsigned),
cast(substring_index(substring_index(yourColumn,'.',2),'.',-1) as unsigned),
cast(substring_index(substring_index(yourColumn,'.',3),'.',-1) as unsigned)
;

【讨论】:

  • 很高兴它有帮助!请您接受答案以表明它回答了您的问题吗?
【解决方案2】:
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table(legal VARCHAR(12) NOT NULL PRIMARY KEY);

INSERT INTO my_table VALUES('1.8.8'),('1.8.9'),('1.9.1'),('1.9.2'),('1.8.10');

SELECT * FROM my_table ORDER BY INET_ATON(legal);

+--------+
| legal  |
+--------+
| 1.8.8  |
| 1.8.9  |
| 1.8.10 |
| 1.9.1  |
| 1.9.2  |
+--------+

请注意,这是一个 hack。因此,它具有一定的局限性。也就是说,它很有可能会很好地满足您的目的。

【讨论】:

  • 冬青废话就像一个魅力,我试图解决这个问题已经很久了
  • 是的,这只适用于 255.255.255.255 的格式,它不适用于超过 255 的数字。应该小心使用。我建议在这篇文章中使用 Abdul Rehman 的解决方案,即 ORDER BY COLUMN_NAME *1 在我的情况下效果很好。
  • @WajiraWeerasinghe 不。这是对一个略有不同的问题的答案。
【解决方案3】:

这可能会有所帮助,简单而准确的答案:

SELECT `COLUMN_NAME` FROM `TABLENAME` WHERE 1 ORDER BY `COLUMN_NAME` *1

【讨论】:

    【解决方案4】:

    这称为“自然排序”,在 MySQL 中无法执行自然排序:Natural Sort in MySQL

    您可以使用特殊的排序字段来解决它。使用以下值:

    10808 10809 10901 10902 10910 (前导零)

    PS 作为奖励 - 对整数进行排序比对字符串(尤其是具有一些魔术规则的字符串)进行排序要快得多。特别是如果您创建排序索引。

    【讨论】:

      【解决方案5】:

      没有一个答案是实用的(错误的或没有表现的)。 假设您的带点的 varchar 列是 productId 那么您必须使用:

      SELECT * FROM PRODUCT_TABLE ORDER BY productId * 1,length(productId)
      

      productId * 1 为您提供与INET_ATON(productId) 相同的结果,但它们都不完整。

      0.0.0
      0.0
      0
      

      我得到了这样的结果,所以要修复刚刚添加的 length(productId)

      0
      0.0
      0.0.0
      

      现在一切都很好。

      【讨论】:

        猜你喜欢
        • 2012-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-03
        • 2018-04-20
        • 2018-01-21
        • 2011-09-24
        • 2016-01-08
        相关资源
        最近更新 更多