2011-02-05 1 views
1

Моя схема таблицы (Имя таблицы Фото)Как сортировать VarChar даты в SQL Server 2000

поле

Date Datetime 

Если Date, имеющий тип данных является Datetime то SQL Server сортирует дату в хорошо/идеальный заказ. См. Ниже пример.

select date from stock order by date 

затем результат:

Date(yyyy/MM/dd) 
2010-04-02 00:00:00.000 
2011-02-02 00:00:00.000 
2011-02-03 00:00:00.000 
2011-02-03 00:00:00.000 

Но если я буду сортировать же путем литья VARCHAR, чем он будет в конечном итоге создать проблему и проблема в том, что не будет дата сортировать по дате порядка, теперь он бросается в Varchar.

Посмотрите на примере ниже:

select date = convert(varchar, date, 103) from stock order by date 

затем результат:

Date(dd/MM/yyyy) 
02/02/2011 
02/04/2010 
03/02/2011 
03/02/2011 

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

Теперь дошло до того, что:

Если я хочу, чтобы отсортировать дату, которая произнесения в порядке VarChar по дате, чем как это сделать ?.

+0

@marc_s, Спасибо, но, пожалуйста, прочитайте мою последнюю строку моего вопроса. – mahesh

+0

@marc_s, вы имеете в виду дату хранилища как дату данных, Oh! приходите на человека. SQL-Server-2000 не имеет даты типа данных. – mahesh

+0

нет, но SQL Server 2000 ** имеет ** тип данных 'DATETIME' - используйте это !! –

ответ

6

Что вы делаете преобразования varchar к varchar, а затем сортировки тем, что ... вы не сортировать по дате!

convert(varchar, date, 103) 
     ********* 

Этот тип здесь то, что вы преобразовать значение в - вы конвертируете в varchar - конечно, это будет не сортировать по дате тогда!

Попробуйте вместо этого:

SELECT CONVERT(DATETIME, date, 103) 
FROM dbo.Stock 
ORDER BY CONVERT(DATETIME, date, 103) 

СЕЙЧАС вы на самом деле преобразования вашего varchar столбец date до значения DATETIME и сортировки на том, что в результате DATETIME - и теперь вы получите результат:

2010-04-02 00:00:00.000 
2011-02-02 00:00:00.000 
2011-02-03 00:00:00.000 
2011-02-03 00:00:00.000 

Обновление: Если вам нужно другое форматирование, вы можете, конечно, конвертировать DATETIME снова, обратно в VARCHAR используя CONVERT с другим стилем:

Читать все о том, что стили поддерживаются в MSDN CAST and CONVERT

SELECT 
    date = CONVERT(VARCHAR, CONVERT(DATETIME, date, 103), 103) -- convert back to VARCHAR 
FROM 
    dbo.Stock 
ORDER BY 
    CONVERT(DATETIME, date, 103) -- sort by the DATETIME ! 

и тогда вы получите этот результат:

02/04/2010 
02/02/2011 
03/02/2011 
03/02/2011 

Просто сделайте обязательно соберите на DATETIME значение! (не в строковом представлении вашего DATETIME)

И как я уже сказал: если вы сохраните свои даты как DATETIME с самого начала, вы сэкономите много таких конверсий взад и вперед !!

+0

Да, это было передо мной, но есть проблема, и проблема в том, что она вернется в формате yyyy/MM/dd, где, поскольку мое требование относится к dd/MM/yyyy. Формат, который вы думаете об этом? – mahesh

+0

Да, вы правы, и ваша формула работает, но небольшая проблема заключается в том, что там нет имени столбца, поэтому любезно отредактируйте вторую строку вашего кода до даты = CONVERT (VARCHAR, CONVERT (DATETIME, дата, 103), 103) - конвертировать обратно в VARCHAR – mahesh

+0

... для принятия меня к правильному ответу необходимо – mahesh

1

Вы можете использовать вспомогательный запрос следующим образом

select convert(varchar,date,103) date from (select date from stock order by date)p 
+0

Ошибка: «Сервер: Msg 1033, уровень 15, состояние 1, строка 58 Предложение ORDER BY недействительно в представлениях, встроенных функциях, производных таблицах и подзапросах, если не указано также TOP». – mahesh