Причина, по которой результаты не упорядочиваются RegistrationDate
при преобразовании его в предложение varchar
in Select
, заключается в том, что предложение Order By
логически обрабатывается после оценки предложения Select
,Теперь в первом запросе, когда вы пишете
Select * from Table_Candidate_Info order by RegistrationDate desc
[Хотя запись * в списке выбора - очень плохая практика], формат RegistrationDate по-прежнему остается датой в предложении Select
, что верно для дальнейшей логической фазы обработки Order By
пункт.Следовательно, 31.01.2019
стоит первым, а 31.12.2018
позже.
Но когда вы преобразуете его в varchar(10)
, чтобы получить требуемый формат, тогда фактически предложение Order By
упорядочивает Varchar
, а не Date
.Следовательно, 31/12/2018
идет первым, а 31/01/2019
идет после него.
Чтобы решить проблему, если вы хотите сохранить форматирование столбца даты / времени в Select
, но Order By
со значением Date
, тогдапросто приведите столбец datetime обратно к Date
в Order by
предложении.
Псевдокод:
select CONVERT(VARCHAR(10),RegistrationDate,103) as RegistrationDate from
Table_Candidate_Info
order by cast(RegistrationDate as Date) desc -- cast it back to date
Демонстрационная ссылка здесь: https://rextester.com/WMLQL78387