Подтвердить что ты не робот

Порядок по дате поступления - месяц, день и год

Это кажется глупым, но мне просто нужен список дат, которые нужно заказать с самой последней датой сверху. Использование order by DESC похоже не работает так, как я хочу.

SELECT     *
FROM         vw_view
ORDER BY EventDate DESC

Он дает мне дату, указанную месяцем и днем, но не учитывает год. например:

12/31/2009 

12/31/2008

12/30/2009

12/29/2009

Нужно больше походить:

12/31/2009

12/30/2009

12/29/2009

12/28/2009

и т.д.

4b9b3361

Ответ 1

Я предполагаю, что EventDate - это char или varchar, а не дата, иначе ваш порядок по порядку будет в порядке.

Вы можете использовать CONVERT для изменения значений до даты и сортировки с помощью

SELECT * 
FROM 
     vw_view 
ORDER BY 
   CONVERT(DateTime, EventDate,101)  DESC

Проблема с этим, как указывает Sparky в комментариях, если EventDate имеет значение, которое невозможно преобразовать в дату, когда запрос не будет выполнен.

Это означает, что вы должны либо исключить плохие строки, либо позволить плохим строкам перейти к нижней части результатов.

Чтобы исключить неправильные строки, просто добавьте WHERE IsDate(EventDate) = 1

Чтобы позволить неудачным датам идти в нижнюю часть, вам нужно использовать CASE

например.

ORDER BY 
    CASE
       WHEN IsDate(EventDate) = 1 THEN CONVERT(DateTime, EventDate,101)
       ELSE null
    END DESC

Ответ 2

попробуйте ORDER BY MONTH(Date),DAY(DATE)

ОБНОВЛЕНИЕ ПОЛЬЗОВАТЕЛЯ ANONYMUS:

Попробуйте это:

ORDER BY YEAR(Date) DESC, MONTH(Date) DESC, DAY(DATE) DESC

Отлично работал на JET DB.

Ответ 3

У вас есть поле в строке, поэтому вам нужно будет преобразовать его в datetime

order by CONVERT(datetime, EventDate ) desc

Ответ 4

Каков тип поля EventDate, так как упорядочение неверно, я предполагаю, что у вас нет определенного типа представления даты/времени, а строка. И тогда американский способ написания дат неприятен для сортировки

Ответ 5

Предполагая, что у вас есть возможность сделать изменения схемы единственным приемлемым ответом на этот вопрос, IMO заключается в изменении базового типа данных на что-то более подходящее (например, date, если SQL Server 2008).

Хранение дат как строки mm/dd/yyyy неэффективно, трудно проверить правильность и делает сортировку и расчеты даты ненужными болезненными.

Ответ 6

Если вы изменили формат даты на ГГГГ/ММ/ДД, вы можете использовать этот простой порядок строк, чтобы достичь необходимого вам формирования.

В качестве альтернативы, используя команду SUBSTR (store_name, start, length), вы должны иметь возможность реструктурировать термин сортировки в вышеуказанный формат

возможно, используя следующие

SELECT     *
FROM         vw_view
ORDER BY SUBSTR(EventDate,6,4) + SUBSTR(EventDate, 0, 5) DESC