【问题标题】:How to sort using month and day using mysql如何使用mysql使用月份和日期进行排序
【发布时间】:2013-06-27 16:59:55
【问题描述】:

我有一个这种格式的日期。

08 april 1989
02 December 1984
13 January 1986 

我想使用月份和日期对结果进行排序,其中有“dateofb”列,我排序就像

13 january 1986
08 april 1989
02 december 1984

我使用了下面的代码,但不能正常工作,

$sel = $db->query("select * from biography where dateofb >= (CURDATE() - INTERVAL 90 DAY) order by dateofb desc limit 0,3");

我想显示 90 天后的 3 个排序结果。

【问题讨论】:

  • 如果您使用标准日期格式 (YYYY-MM-DD),这将是微不足道的
  • 所以你告诉我们你有一个存储在 varchar 中的日期,并且使用月份名称而不是数字 - 谁设计了这个数据库?
  • 您可以显示查询的结果吗?另外,请显示 datofb 的内容
  • @JohnConde 我会将 db 重新转换为 yyyy-mm-dd 格式,但是如何实现排序。提前谢谢
  • stackoverflow.com/questions/21152951/how-to-sort-date-in-mysql 类似于这个问题....希望对您有所帮助。

标签: php mysql


【解决方案1】:

是否可以将dateofb 列转换为DATE 列类型?这将允许你做你正在寻找的东西。您现在的格式无效,需要通过STR_TO_DATE(dateofb, '%d %M %Y')进行转换

例子:

$sel = $db->query("select * from biography where STR_TO_DATE(dateofb, '%d %M %Y') >= (CURDATE() - INTERVAL 90 DAY) order by STR_TO_DATE(dateofb, '%d %M %Y') desc limit 0,3");

^- 看看这看起来有多恶心?如果您的 dateofbDATE 列,您可以这样做:

$sel = $db->query("select * from biography where dateofb >= (CURDATE() - INTERVAL 90 DAY) order by dateofb desc limit 0,3");

^- 这是您的原始查询。

【讨论】:

    【解决方案2】:

    如果您的“dateofb”字段是 DATE 或 DATETIME:

    SELECT 
        *    
    FROM biography
    WHERE dateofb >= (CURDATE() - INTERVAL 90 DAY)
    ORDER BY MONTH(dateofb), DAY(dateofb) ASC
    LIMIT 0, 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-26
      • 1970-01-01
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多