【问题标题】:MySQL:How to sort date with RFC112 format?MySQL:如何使用 RFC112 格式对日期进行排序?
【发布时间】:2012-05-03 06:41:00
【问题描述】:

例如,我的表post 上有一个名为date 的列,我想在ascending 中对其进行排序。

在我的date 列上,我用RCF112 格式填充它,例如:Sun, 22 APR 2012 5:21:22

首先我从这个命令开始:

SELECT * 
FROM  post 
ORDER BY date ASC

但结果似乎不正确,因为它是根据其字符串排序的,例如。 Sun, 15 APR 2012 将比 Wed,11 APR 2012 更早,因为“Sun”以字母“W”前面的“S”开头,因此“Sun, 15 APR 2012”首先出现。

如何纠正这个命令?

【问题讨论】:

  • date 列的数据类型是什么?
  • @sarwar026:我用的是varchar,是不是不对?
  • 是的,它应该是 DATETIME 数据类型。请试一试,然后再检查。
  • 我已经使用了 DATETIME 数据类型。但问题是,每次插入数据时都会出错。 "警告:#1264 第 1 行的列 'date' 的值超出范围"
  • 该错误意味着您正在插入格式错误的数据——MySQL 的 DATETIME 列期望的格式是 YYYY-MM-DD HH:MM:SS。因此,在插入时将您的数据转换为该格式,然后对其进行排序即可。

标签: mysql sql date format sql-order-by


【解决方案1】:

您需要将字符串解析为日期时间才能正确排序。

使用您的格式,您可以尝试以下操作:

STR_TO_DATE('Sun, 22 APR 2012 5:21:22', '%a, %e %b %Y %h:%i:%S')

创建日期2012-04-22 05:21:22

因此,您的查询应该如下所示:

SELECT * 
FROM  post 
ORDER BY 
  STR_TO_DATE(date, '%a, %e %b %Y %h:%i:%S')
ASC

正如其他人可能已经建议的那样,您可以使用 datetime 字段类型并格式化选择中的日期 (date_formathttp://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-format) 以满足您的要求。

【讨论】:

  • 日期和月份的名称是缩写的,所以你的格式掩码不正确。
  • @Ben 你是对的,我将更新答案以使用缩写代替。感谢您的提示。
【解决方案2】:
SELECT * 
FROM  post 
ORDER BY STR_TO_DATE(datestr, '%a, %d %b %Y %T') ASC

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 2019-08-20
    • 2023-03-13
    • 1970-01-01
    • 2023-02-10
    • 2021-05-08
    • 2018-05-29
    • 1970-01-01
    相关资源
    最近更新 更多