2012-10-08 2 views
3

제 데이터베이스에는 1. 학년, 2 학년과 같은 성적이 포함 된 이름 열이있는 표가 있습니다. 숫자가 10 이상이되면 정렬은 내가 원하는대로 작동하지 않습니다. 10. 점수는 정렬 된 레코드 세트의 2. 이전에옵니다. 나는 이것이 문자열 정렬이 정수 정렬과 다르다는 것을 안다. 질문은 이러한 문자열을 숫자 방식으로 정렬하는 방법입니다.Rails에서 숫자와 텍스트로 문자열 정렬

등급 레코드는 ancestry 플러그인이있는 트리 buildt의 일부이므로 order => "(결과를 정렬하는 일부 코드)"안에 전체 정렬 코드를 넣어야합니다.

나는 :order => "CAST(SUBSTRING_INDEX(name, '.') AS SIGNED)"을 시도했다. 그러나 이것은 효과가 없습니다.

SQLite는 개발 환경에서, MySQL은 프로덕션 환경에서 사용합니다.

답변

3

시도해보십시오.

상수 값을 '로 대체하십시오. 빈 문자열을 사용하여 열의 '등급'을 지정하면 숫자 값을 얻습니다. 이 아니 '등급은'항상 다음

order by cast(left(name,LOCATE('.',name,1)-1) as UNSIGNED) 


SQL fiddle demo

+0

을 시도하는 경우에 귀하의 코멘트에 따라

: 동일

order by cast(replace(name,'. grade','') as int) 

편집을 int로 캐스팅 감사! 그게 정말 잘 작동합니다! 그러나 두 번째 문제가 있습니다. 문자열의 ". grade"부분이 다른 언어 (". trinn")로 다른 경우가있을 수 있습니다. 여러 가지 언어가있을 수 있습니다. 주어진 문자의 문자열에서 모든 것을 제거하는 방법이 있습니까 (예 : '.'포함)? –

+0

@JohanHovda : 나는 나의 대답을 업데이트했다 .. plz check –

+0

@JohanHovda : 나는 내 대답을 업데이트했다. plz 지금 확인 –