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
答案 0 :(得分:2)
您的EffectiveTo
列属于文字类型,例如varchar
而不是date
或datetime
。这是一个非常糟糕的设计。你可以做的解决方法是:
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