SQL Server - 按结果的一部分排序

时间:2014-11-27 11:14:33

标签: sql sql-server asp-classic

我想知道是否有人可以伸出援助之手。

我有一个很长的SQL查询。

我想要做的是分解存储日期的列,并按年份排序结果。部分查询如下:

SELECT CONVERT(CHAR(8), DateAdd(minute, -601, pay.Expiry), 10) 
       as DailyDate 
FROM table 
ORDER BY DailyDate

这给了我一个' DailyDate'以下列格式输出:

12-07-14

年份是最后2位数。

有没有办法可以根据这2位数对结果进行排序?

任何帮助都会很棒。

干杯,

5 个答案:

答案 0 :(得分:2)

使用此查询。

SELECT CONVERT(CHAR(8), DateAdd(minute, -601, DailyDate ), 10) as DailyDate  FROM
table  
ORDER BY SUBSTRING(CONVERT(CHAR(8), DateAdd(minute, -601, DailyDate ), 10), 7, 2), 
         SUBSTRING(CONVERT(CHAR(8), DateAdd(minute, -601, DailyDate ), 10), 4, 2)

答案 1 :(得分:1)

... ORDER BY SUBSTRING(DailyDate, 7, 2)

答案 2 :(得分:1)

你可以这样做:

ORDER BY right(DailyDate,2)

您将仅从右侧的最后两个数字(在您的情况下是年份)订购数据

答案 3 :(得分:0)

 SELECT CONVERT(CHAR(8), DateAdd(minute, -601, pay.Expiry), 10) as DailyDate FROM table ORDER BY ( YEAR( DateAdd(minute, -601, pay.Expiry)) % 100 ) ASC,( DateAdd(minute, -601, pay.Expiry) ASC

以下代码不是强制性的,不是强制性的

  

(DateAdd(分钟,-601,pay.Expiry)ASC

您需要的代码是

  

(YEAR(DateAdd(分钟,-601,pay.Expiry))%100)ASC

答案 4 :(得分:0)

您只需使用YEAR功能:

ORDER BY YEAR(DateAdd(minute, -601, pay.Expiry))

这样,当1900年和2000年的数据出现时,您的数据将以正确的方式排序。 (我的意思是最后2位数相等的所有情况。)

[编辑] 要通过MONTH使用内置日期函数进一步订购,不依赖转换后的字符串来订购数据

ORDER BY YEAR(DateAdd(minute, -601, pay.Expiry)) ,
         MONTH (DateAdd(minute, -601, pay.Expiry))