2013-08-16 1 views
0

У меня есть таблица, имеющий две колонки 1) PRODUCTID (целое) 2) PublishDate (VARCHAR) данные как следующийПреобразование даты в формате ДД/ММ/ГГ формиата и порядка им

ProductId PublishDate 
73   22/01/97 
56   17/09/90 
56   01/09/90 
69   15/05/13 
69   09/05/13 

я должен получить запись из этой таблицы, но в PublishDate Order by Desc, как PublishDate является varchar, я не могу это сделать, может кто-нибудь, пожалуйста, помогите мне в этом.

Я попытался следующим запросом:

SELECT T.ProductId, 
     T.MYDATE 
FROM 
(
SELECT  ProductId, CONVERT(varchar(max), PublishDate , 101) AS MYDATE 
FROM   DateValidation 

) T 
ORDER BY T.MYDATE DESC 

ответ

0

Here is the SQLFIddel Demo

ниже является запросом, который Вы можете попробовать

Select ProductId, 
     Convert(Date,substring(PublishDate,4,3) + 
        substring(PublishDate,1,3) + 
        substring(PublishDate,7,2))    
    From DateValidation 
Order By 2 Desc 
3

Yo не нужно изменить формат дату, потому что она хранится в вашем необходимом формате (она хранится в виде VARCHAR, это грязного рисунок).

Но ваш вопрос сортируется по дате. Для сортировки по дате календаря вам нужно конвертировать VARCHAR в действительную дату:

SELECT  ProductId, PublishDate 
    FROM  DateValidation 
ORDER BY CONVERT(DATE, PublishDate, 103) desc 

Я призываю вас, чтобы хранить даты в формате даты, но VARCHAR.

+0

Это лучшее из двух ответов, как он фиксирует основополагающим issue - сохранение даты как varchar. Единственная проблема может заключаться в том, что исходная схема не может быть изменена, и в этом случае другой ответ может быть полезен ... но он все еще заставляет меня думать о датах, хранящихся в виде строк! – Charleh

0

Try This

SELECT ProductId,CONVERT(date,PublishDate,3) 
FROM DateValidation 
order by 2 desc 
Смежные вопросы