2013-11-09 2 views
1

그래서 VARCHAR 필드가있는 테이블이 있습니다. 소수의 많은 가치를 정렬하는 데 사용됩니다SQL, 소수 자릿수가있는 varchar 필드 = ORDER BY는 순차적으로 정렬하지 않음

의 내가 내 VARCHAR 필드에 다음 항목이 있다고 가정 해 봅시다 :

  • 9.99
  • 263.28
  • 9.98

이의 말합시다을 ORDER BY varchar DESC를 사용하여 모든 항목을 표시하려고합니다. 그 결과는 다음과 같습니다 분명히 263.28가 첫 번째해야

  • 9.99
  • 9.98
  • 263.28

. 뭐가 문제 야 ?

+0

'DESC'는 내림차순입니다. 만약 낮은 값에서 높은 값으로 원하면'DESC'을'ASC'로 바꾸거나'DESC'을 제거하십시오. –

+0

아니요, DESC를 원하지만 가장 큰 숫자가 먼저 표시되지 않습니다. – libertaire

+1

먼저 varchar 열에 숫자를 저장하면 안됩니다. 적절한 숫자 유형을 사용했다면 순서는 괜찮을 것입니다. –

답변

3

varchar 필드에 10 진수 값이 모두있는 경우 십진수로 변환 한 다음 order by 절을 적용하십시오. 나는 MySQL의 데이터 유형에 대해별로 생각을 가지고와 기능을 변환하지만, MS SQL에서 당신처럼 진수로 변환 할 수 있습니다

ORDER BY CAST(field AS DECIMAL(18,2)) DESC 

UPDATE :

예, MySQL은 또한이 캐스팅 기능 : http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html

+0

나는 mysql을 사용하고있다. 18,2는 무엇을 의미합니까? – libertaire

+0

18은 2의 정밀도를 갖는 십진법의 길이입니다 –

+0

그러나 십진법의 데이터베이스에서 길이가 다른 경우 어떻게해야합니까? – libertaire

1

varchar 열을 사용하여 주문하면 mysql이 사전 순으로 정렬됩니다. 첫 번째 문자 "2"는 "9"앞에옵니다. 그래서 당신이 보는 순서를 얻는 것입니다. order by 절에서 varchar 열을 10 진수로 변환하면 예상대로 작동합니다.

또는 "9.99"를 "009.99"로 업데이트하는 등 모든 행의 문자 수가 동일하도록 할 수 있습니다. 그런 다음 알파벳순 정렬이 숫자 정렬과 일치합니다. 나는 이것을 당신이 실제로 솔루션으로 사용하도록 제안하는 것이 아닙니다. 단지 데이터베이스에서 어떻게 작동하는지 보여줍니다.

+0

어떻게 mysql을 사용하여 십진수를 캐스팅합니까? 전에는 해본 적이 없어. 내 데이터베이스에있는 십진수 데이터는 사용자 지정 PHP 스크립트에서오고 있으므로 같은 수의 문자로 소수점을 사용하도록 스크립트를 편집 할 수 있습니다. 거기에 자동으로 PHP 함수가 있나요? – libertaire

+0

다른 대답의 코드는 정상적으로 작동합니다. Upendra Chaudhari의 링크는 캐스트 기능에 대해 자세히 설명합니다. – acfrancis

관련 문제