【问题标题】:Sorting Dates and serial number排序日期和序列号
【发布时间】:2016-11-03 17:19:30
【问题描述】:
Date                        SrNo
SEL/2016APR01/002/000001    01
SEL/2016APR02/002/000001    04
SEL/2016APR03/002/000001    03
SEL/2016JAN01/002/000001    02

我需要按降序对第一列日期部分(2016JAN01)进行排序,如果有两个相同的日期,则我需要按降序对第二列进行排序。

substr('SEL/2016APR01/002/000001', 4,12) 给了我2016APR01,但我不知道如何对这种格式的日期进行排序。

我的查询看起来像这样

SELECT *
FROM tablename
ORDER BY substr(Date) DES, SrNo DESC

【问题讨论】:

  • 也许你应该考虑以一种更明智的方式存储这些数据,并将这些数据的每个部分放在自己的列中,然后这将是一件轻而易举的事
  • 如果您使用的是 SQL Server,您到底为什么要标记您的问题 MySQL?

标签: mysql sorting date


【解决方案1】:

更新:

第一个答案涵盖 SQL Server,而下面的答案是针对 MySQL。你最初标记了你的问题 MySQL,所以每个人都回答了这个问题。

对于 SQL Server,您可以使用 CONVERT:

ORDER BY CONVERT(DATETIME,
                 SUBSTRING(Date, 12, 2) + ' ' +
                 SUBSTRING(Date, 9, 3) + ' ' +
                 SUBSTRING(Date, 5, 4),
                 106) DESC,
         SrNo DESC

如果您实际使用的是 MySQL,那么STR_TO_DATE 将是您的最佳选择:

ORDER BY STR_TO_DATE(SUBSTR(Date, 4, 12), '%Y%b%d') DESC,
         SrNo DESC

以下是格式化参数的含义:

%Y - four digit year
%b - three letter month (e.g. JAN, APR)
%d - two digit day of month

如果月份名称的大写格式导致STR_TO_DATE 不起作用,您可以尝试以下方法(诚然有点难看):

ORDER BY STR_TO_DATE(
             CONCAT(SUBSTRING(Date, 5, 4),
                    SUBSTRING(Date, 9, 1),
                    LOWER(SUBSTRING(Date, 10, 2)),
                    SUBSTRING(Date, 12, 2)),
             '%Y%b%d') DESC,
         SrNo DESC

正如@RiggsFolly 所说,如果您以标准 MySQL 格式存储日期,您的生活会变得更轻松。

【讨论】:

  • mySQL 返回 null 我认为由于 APR 的情况
  • mySQL 正在返回 NULL
  • 它说 STR_TO_DATE' 不是公认的内置函数名
  • 我没有使用 mysql。我正在使用 sqlsrv
【解决方案2】:

你试过ORDER BY DATE_FORMAT(substr(Date, 4,12)), '%Y%b%d') DESC, SrNo DESC

【讨论】:

    【解决方案3】:

    使用 STR_TO_DATE 函数

    SELECT *
        FROM tablename
        ORDER BY STR_TO_DATE(SUBSTR(Date, 4, 12), '%Y%b%d') , SrNo DESC
    

    【讨论】:

      猜你喜欢
      • 2020-02-08
      • 1970-01-01
      • 2016-07-22
      • 1970-01-01
      • 1970-01-01
      • 2016-08-09
      • 2020-05-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多