【问题标题】:MySQL ORDER BY Date field which is not in date formatMySQL ORDER BY 日期字段不是日期格式
【发布时间】:2013-06-05 09:24:10
【问题描述】:

我有一个包含 DD/MM/YYYY 格式的日期的字段,我需要按此字段对结果进行排序,但它被保存为 VARCHAR,我无法更改。有解决办法吗?

我真的没有办法更改字段类型,所以请不要说这是一个坏方法,因为我已经知道了。我只需要知道这是否可能。

提前感谢您的任何帮助和建议。

【问题讨论】:

标签: php mysql


【解决方案1】:

您可以通过以下方式进行,

SELECT ...
FROM ...
ORDER BY STR_TO_DATE(yourDate,'%d-%m-%Y') DESC

【讨论】:

    【解决方案2】:

    使用STR_TO_DATE

    http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html#function_str-to-date

    ...
    order by str_to_date(myCol, '%d/%m/%Y')
    

    【讨论】:

    • 与@PSR完全一样:)
    【解决方案3】:

    使用STR_TO_DATE() MySQL 函数:

    SELECT * FROM your_table ORDER BY STR_TO_DATE(your_date_column, '%d/%M/%Y') DESC;
    

    旁注:STR_TO_DATE 将字符串转换为日期,而DATE_FORMAT 将日期转换为字符串

    【讨论】:

      【解决方案4】:

      这取决于您在日期字段中存储日期的方式。就我而言,它是用“/”分隔的,所以我使用了 -

      ...
      ORDER BY STR_TO_DATE(report_date, '%m/%d/%Y') DESC;
      

      如果您使用“-”来分隔日期、月份和年份,那么您可以使用 -

      ...
      ORDER BY STR_TO_DATE(report_date, '%m-%d-%Y') DESC;
      

      【讨论】:

        【解决方案5】:

        使用这个

        STR_TO_DATE

           SELECT * FROM table_name ORDER BY  STR_TO_DATE(date_field, '%d-%M-%Y') DESC
        

        【讨论】:

          【解决方案6】:
          ORDER BY CONCAT(SUBSTR(field, 7, 4), SUBSTR(field, 4, 2), SUBSTR(field, 1, 2)) DESC
          

          【讨论】:

            猜你喜欢
            • 2013-12-30
            • 2019-06-09
            • 2023-02-21
            • 1970-01-01
            • 2022-11-11
            • 2010-10-27
            • 1970-01-01
            • 2010-12-05
            • 2012-05-24
            相关资源
            最近更新 更多