2013-01-05 2 views
0

내 데이터베이스 SQLite는에서 나는이 잘못된 순서로 내 번호 열을 반환 주문 번호 순으로

이 쿼리

select... order by cast("+filter+" as real) 
로 주문하려고 왜 문자열로 저장 부동 소수점 숫자와 시간과 열이 :

22,5 
    23 
    23,5 
    23 
    23,5 
    24,5 
    24 

또는이 잘못된 순서로도 내 배 열 :

00:56 
00:57 
00:52 
00:46 
+0

는 문자열 –

+0

를 작동 할 수 있습니다로 주문, 실제에 캐스팅없이 주문하는 것을 시도했다 그래서 당신은 문자열 열에서 두 개의 문자열이 아닌 데이터 유형을했습니다. 나쁜 날을 보내고 있었습니까? 45:24가 45.24 이전 또는 이후이어야합니까? –

답변

0

시도

select... order by cast(replace("+filter+",',','.') as real) 

Sqlite는 소수 부분 구분 기호로 쉼표가 아닌 점을 사용해야합니다. 또한 변환 할 수없는 꼬리를 자동으로 무시하므로 '24, 5 '는 24.0으로 변환됩니다. 당신이 떠 캐스팅없이, 문자열로 정렬 할 경우 배 열의로

, 그것은 잘 정렬됩니다. 하지만 어떤 이유로 그것을 캐스팅하려는 경우 replace으로 콜론을 점으로 변환 할 수 있습니다.

+0

예, "+ filter +"오름차순으로 정렬합니다. 내 시간과 플로트 열을 잘 나타내지 만 다른 열은 정수가 아닙니다. (항상 문자열로 저장 됨) 10, 11, 12, 9 ... 내 가상 장치에 점이있는 부동 소수점 열이 있지만 실제 전화 지점은 쉼표가됩니다 – lucignolo

+0

정수를 문자열로 저장하는 이유 (sqlite 정수가 너무 좁은 경우에는 bigint도 충분합니다). 내가 무슨 뜻인지 생각 : 서로 다른 열을 다른 캐스트 (사용하는 경우)를 사용하고, 부동으로 캐스팅하는 경우 바꾸기로 구분 기호를 수정하십시오. –

+0

Anton에게 감사드립니다. 문자열 대신 int를 관리하도록 모든 프로젝트를 변경하려고합니다. . – lucignolo