SELECT *
FROM tablename
ORDER BY substr(Date) DES, SrNo DESC
我需要按降序排序第一列日期部分(2016JAN01),如果有两个相同的日期,那么我需要按降序排序第二列。
<a href="http://example.com/filename"><img src="dummy.jpg"></a>
给了我{{1}},但我不知道如何对该格式的日期进行排序。
我的查询看起来像这样
{{1}}
答案 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