2016-06-15 4 views
0

varchar (12) 인 테이블에 필드가 있지만 해당 필드의 데이터는 1/1/2016 (약 5,000 개의 날짜가 있음)입니다. 나는 주문을하려고했으나 날짜별로 주문하지 않는 것 같습니다. DateTime 필드가 아닌 경우 해당 필드에서 ORDER BY를 수행하는 방법은 무엇입니까 ??SQL 서버 - 개발자 BY

+4

올바른 데이터 유형을 사용하면 이러한 문제가 발생하지 않습니다. 왜'date' 대신에'varchar'를 사용하고 있습니까? –

+0

시도한 쿼리를 제공 할 수 있습니까? 그러면 올바른 답을 얻을 수 있습니다. – Denn

+0

ServiceEnd desc에 의해 TblClients 순서에서 firstName, LastName, ServiceStart, ServiceEnd를 선택하십시오. 그러나 vercelli는 이미 그것을 대답했습니다. 고맙습니다! – LD16

답변

5

시도 :

Order by cast(Field as datetime) 
+1

대단히 감사합니다. @vercelli – LD16

+0

@ LD16 기꺼이 도와주었습니다. Gordon Linoff는 좋은 지적입니다. 그의 대답도 확인하십시오. – vercelli

3

같은 CAST()를 사용하여 "2016년 1월 1일"와 같은 날짜의 변환 현지화 설정에 따라 달라집니다. 그런 다음

order by convert(datetime, field, 101) 

, 당신은 그 위험을 실행으로 값을 가정

는 (일부 국가는 DD/MM은/YYYY를 사용합니까) MM/DD/YYYY 형식으로, 다음이보다 안전하게 기록 필드가이 형식과 정확하게 일치하지 않으면 변환이 실패 할 수 있습니다. 이 오류를 방지하기 위해 SQL Server 2012+는 try_convert()을 제공합니다.

그래서, 나는 가장 좋은 방법이라고 생각 :

order by try_convert(datetime, field, 101) 
+0

. . . '101'은 무엇입니까? –

+0

SQL Server가'format()'을 도입하기 전에 날짜를 형식화하는 데 사용한 어리석은 방법입니다. 이 코드는 https://msdn.microsoft.com/en-us/library/ms187928.aspx에 문서화 된 마법 코드입니다. –

+0

고맙게도 나중에 복사되는 중요한 데이터를 쿼리하기 위해서만 필요합니다. 저장 프로 시저를 만들거나 코드에서 재사용하지 않습니다. 고마워요! – LD16