排序日期和序列号

时间:2016-07-01 10:23:47

标签: mysql sorting date

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

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

<a href="http://example.com/filename"><img src="dummy.jpg"></a> 给了我{{1}},但我不知道如何对该格式的日期进行排序。

我的查询看起来像这样

{{1}}

3 个答案:

答案 0 :(得分:3)

<强>更新

第一个答案涵盖了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格式存储日期,您的生活会变得更轻松。

答案 1 :(得分:0)

您是否尝试过ORDER BY DATE_FORMAT(substr(Date, 4,12)), '%Y%b%d') DESC, SrNo DESC

答案 2 :(得分:0)

使用STR_TO_DATE FUNCTION

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