【问题标题】:Sorting out date in mysql在mysql中排序日期
【发布时间】:2016-04-07 06:04:01
【问题描述】:

例如,我们的日期如下:

04/04/2017
12/12/2016
03/04/2016

您如何排序将导致的日期:

11/12/2016
03/04/2016
12/04/2017

ORDER BY ASC/DESC 不起作用。请帮忙。

顺便说一句,我有药物的数据,上面有过期日期。我只希望我的列表视图中的第一个数据将是第一个过期的药物。

【问题讨论】:

  • 未订购:11/12/2016 03/04/2016 12/04/2017 & 您的日期字段类型是什么?
  • varchar。我认为这是我的问题。

标签: mysql sorting date datetime


【解决方案1】:

确定使用 DateTime 数据类型而不是 Varchar 是最好的解决方案吗?

与 Varchar 的日期时间转换相比,您将在索引的 DateTime 列上获得更有效的查询计划排序。

这也将防止存储无效日期,这可以通过 Varchar 实现。

如果您在列上查询,索引的日期时间列也会有所帮助。

【讨论】:

  • 一切对我来说都是新的。但后来我又解决了这个问题。我在转换为varchar之前的问题是日期时间选择器的格式与mysql日期类型不兼容。
  • 这不应该决定你的数据库设计——这是不好的做法。您应该在插入记录时将日期选择器中的值转换为 Mysql 接受的 DateTime 格式。
【解决方案2】:

试试这个:

ORDER BY STR_TO_DATE(your_date_column, '%d/%m/%Y')

您的日期以 dd/mm/yyyy 格式保存为 varchar 的位置

【讨论】:

    【解决方案3】:

    如果你使用这个function:

     STR_TO_DATE('04-04-2017', '%d/%m/%Y')
    

    您会将包含日期的 varchar 转换为 DATE 数据类型。这些排序正确。

    所以,

    ORDER BY STR_TO_DATE(expireation_date_column, '%d/%m/%Y') NULLS FIRST
    

    会给你一个有用的排序。 NULLS FIRST 部分将向您显示日期格式不正确的行,如果有的话,在您的排序顶部。

    如果这是一个大型项目,您最好在将这些到期日期插入表时将它们转换为 DATE 数据类型。这样一来,您就可以获得各种好处,包括能够使用索引来搜索这些日期。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      相关资源
      最近更新 更多