按最新日期排序

时间:2015-01-08 11:54:07

标签: sql sql-server tsql

SQL

SELECT 
   CONVERT(VARCHAR, EffectiveTo, 105) as EffectiveTo 
FROM 
   CSchedules 
WHERE 
   CId = 3278 
ORDER BY 
   EffectiveTo ASC

日期

03-08-2014
03-09-2017
03-09-2017
03-09-2017
09-11-2014
14-12-2014
16-11-2014
16-11-2014
20-07-2014
20-12-2015
23-11-2014
24-08-2014
27-12-2015
27-12-2015
30-11-2014
31-08-2014
31-08-2014
31-08-2014

我需要按日期订购,以便:

03-09-2017

是列表中的第一个。但它没有正确排序。基本上是最新的日期。

由DESC订购时:

31-08-2014
31-08-2014
31-08-2014
30-11-2014
27-12-2015
27-12-2015
24-08-2014
23-11-2014
20-12-2015
20-07-2014
16-11-2014
16-11-2014
14-12-2014
09-11-2014
03-09-2017
03-09-2017
03-09-2017
03-08-2014

4 个答案:

答案 0 :(得分:2)

您的EffectiveTo列属于文字类型,例如varchar而不是datedatetime。这是一个非常糟糕的设计。你可以做的解决方法是:

SELECT 
   EffectiveTo 
FROM 
   CSchedules 
WHERE 
   CId = 3278 
ORDER BY 
   CONVERT(DATE, EffectiveTo, 105) DESC

这样,您将文本解析为dd-mm-yyyy格式的日期(这是105参数),因此您可以对其进行正确排序。

如果您想要显示与列中存储的文本不同的内容,您也可以选择在SELECT中进行转换。

答案 1 :(得分:0)

您还需要在顺序中设置隐藏,以将其定义为日期时间而不是文本

SELECT CONVERT(VARCHAR, EffectiveTo, 105) AS EffectiveTo 
FROM CSchedules 
WHERE CId = 3278 
ORDER BY CONVERT(datetime, EffectiveTo, 105) DESC

答案 2 :(得分:0)

只需将其命名为降序。 在最后一行 -

Order by convert(varchar,effectiveto,112) desc

答案 3 :(得分:0)

您需要将其转换为日期,然后订购它。现在它不起作用,因为它认为它是字符串而不是日期

SELECT 
CONVERT(VARCHAR, EffectiveTo, 105) as EffectiveTo 
FROM 
 CSchedules 
WHERE 
 CId = 3278 
ORDER BY 
 order by convert(datetime, EffectiveTo, 105) DESC