2015-01-08 5 views
1

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 
+4

'주문하여 효과가 내려집니다'. 또한, 그 날짜는'varchar'로 저장되어 있습니까? 예, 좋은 일이 아니므로 주문하기 전에 datetime으로 변환해야합니다. –

+2

'ASC'를 'DESC'로 변경하는 방법은 무엇입니까? – potashin

+0

이것 좀보세요 : http://stackoverflow.com/questions/1545888/sql-order-by-date-problem – Zereges

답변

2

귀하의 EffectiveTovarchar 대신 date 또는 datetime 같은 텍스트 타입이다. 이것은 매우 나쁜 디자인입니다. 당신이이 문제를 해결하기 위해 할 수있는 것은 : 당신이 그것을 제대로 정렬 할 수 있도록

SELECT 
    EffectiveTo 
FROM 
    CSchedules 
WHERE 
    CId = 3278 
ORDER BY 
    CONVERT(DATE, EffectiveTo, 105) DESC 

이 방법을 사용하면, DD-MM-YYYY 형식으로 날짜로 텍스트를 (즉, 105 매개 변수의) 구문 분석된다.

열에 저장된 텍스트와 다른 내용을 표시하려면 SELECT에있는 변환을 선택적으로 수행 할 수도 있습니다.

+0

작동하지 않고, 내 질문을 편집했습니다. – bobo2000

+0

오, 당신의 필드는'datetime' 대신에 TEXT 타입입니다 ... 그것을 편집하겠습니다. – Andrew

+0

내가 지금 게시 한 것을 사용해보십시오. – Andrew

0

당신은

SELECT CONVERT(VARCHAR, EffectiveTo, 105) AS EffectiveTo 
FROM CSchedules 
WHERE CId = 3278 
ORDER BY CONVERT(datetime, EffectiveTo, 105) DESC 
0

그냥 내림차순으로 주문 텍스트가 아닌 날짜 시간으로 정의 할뿐만 아니라 의해 순서대로 비밀이 필요합니다. 마지막 줄에서 당신은 날짜로 변환 할 필요가 후 주문

Order by convert(varchar,effectiveto,112) desc 
+0

112는 yyyymmdd입니다. – Andrew

+0

@Andrew, yyyymmdd로 주문하면 제대로 주문됩니다. 나는 출력을 바꾸라고 말하지 않았다. 출력은 105 – moneem

+0

으로 유지됩니다. 그러나'dd-mm-yyyy '형식의'varchar' 필드 (105) 인'EffectiveTo'를'varchar'로 다시 변환합니다. 그것은 데이터에 아무런 영향을 미치지 않습니다. 105 형식의 'date' 또는'datetime'으로 변환되어야합니다. – Andrew

0

put-. 지금은 문자열로 간주하고 날짜가 아니기 때문에 작동하지 않습니다.

SELECT 
CONVERT(VARCHAR, EffectiveTo, 105) as EffectiveTo 
FROM 
CSchedules 
WHERE 
CId = 3278 
ORDER BY 
order by convert(datetime, EffectiveTo, 105) DESC 
+0

106은 "dd mon yyyy"입니다. – Andrew

+0

@Andrew 죄송합니다 105 – DevelopmentIsMyPassion