【问题标题】:MySQL Order rows by dateMySQL 按日期排序行
【发布时间】:2016-09-15 13:40:43
【问题描述】:

我正在尝试按每行的日期对我的行进行排序。

一排有2016-09-15 15:36,一排有2016-08-15 13:12 我如何订购它们以使最高的在顶部?

他们的行称为th_activity,我知道在正常查询中,您会执行SELECT * FROM threads ORDER BY th_activity DESC 之类的操作,但我相信我知道问题所在。我使用 varchar 作为行的类型。如果这是我必须使用的,我不确定日期的长度/值应该是多少。

如果有人能解释我如何正确订购这个,我将不胜感激。

【问题讨论】:

  • 我不太明白为什么这对你来说是个问题。类似于 ISO 8601 的日期/时间的美妙之处在于它可以按字母规则排序并且仍然有意义......所以即使列是 varchar,您仍然应该对其进行排序。如果没有,日期之前可能有空格字符

标签: mysql


【解决方案1】:

如果您的日期是年-月-日时:分,您可以按字母顺序排序,没有任何问题,所以ORDER BY th_activity DESC 应该可以正常工作。

【讨论】:

    【解决方案2】:

    您可以将列的类型设置为timstamp 而不是varchar,它不关心数据的长度(只有在插入数据时才关心格式)。

    按时间戳检查此问题是否有序:

    MYSQL - Order timestamp values ascending in order, from newest to oldest?

    SELECT th_activity
    FROM tableName
    ORDER BY timestamp desc;
    

    【讨论】:

    • 谢谢,现在完美运行!
    【解决方案3】:

    你可能需要一个 str_to_date 转换

    select * from threads 
    ORDER BY str_to_date(th_activity, '%Y-%m-%d %h:%i') DESC
    

    【讨论】:

      【解决方案4】:

      我会使用数据类型

      datetime
      

      并使用您在问题中编写的相同选择:

      order by th_activity DESC
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-04
        • 2012-12-03
        • 1970-01-01
        • 1970-01-01
        • 2016-05-06
        • 2011-02-10
        相关资源
        最近更新 更多