2012-04-05 2 views
4

Delphi XE2에서 기존 Padadox 데이터베이스에서 데이터를 추출해야합니다 (예, 10 년 이상으로 나눕니다 ...).숫자와 문자가 포함 된 필드로 정렬

'1', '2 a', '100', '1 b', '50 bis '와 같은 값을 포함하는 필드 (예제의 id)에 따라 결과를 정렬해야합니다. ...

SELECT id, TRIM(TRIM(ALPHA FROM id)) as generated, TRIM(TRIM(NUMBER FROM id)) as generatedbis, etc 
FROM "my.db" 
WHERE ... 
ORDER BY generated, generatedbis 

내가 어떻게 역설과 같은 순서를 얻을 수 :

- 1 
- 1 b 
- 2 a 
- 50 bis 
- 100 

아마 그런 일이 그것을 할 수 있지만, 해당 키워드가 존재하지 않습니다이 얻을?

답변

7

이 시도 :

SELECT id, CAST('0' + id AS INTEGER) A 
FROM "my.db" 
ORDER BY A, id 
+0

SELECT id, CAST (id AS INTEGER) ... 더 간단하고 트릭을 !! 나를 계몽 해 주셔서 감사합니다 !! – Darkendorf

+2

예, 더 간단합니다. 내 생각에''0 '+'는'id'가 비어 있거나 첫 번째 문자가 알파 인 상황을 처리합니다. 분명히 그것은 필요하지 않습니다. 다행히 도울 수있어. – kobik

+0

사실 처음 char가 alpha 인 경우 ^^ 실제로 int return 0으로 캐스트 - 또는 널 신경 쓰지 않아도된다. a, b, 1, 1b, 12, 100 bis ... 다시 한번 감사드립니다! – Darkendorf

1

이 아이디어가 마음에 봄 :

  1. 이 compariable, 어쩌면 lexographically 무언가로 문자열을 재 배열 비교/매핑 기능을 사용하여 정렬 클라이언트 측을하지 델파이의 정렬 기능을 만들 수 있습니다.

  2. 데이터는 정렬하고자하는 테이블에 열을 추가, 즉 저장 기능을 추가

  3. 에 의해 ORDER와 함께 작동하여 표준 문자열 비교와 비교 될 수있는 값의 수정을 포함 값의 수정을하는 역설로이 함수를 ORDER BY 절에 사용하십시오.

은 수정에 의해, 뭔가 같은 구성 요소로 문자열을 분리하고, 모든 구성 요소 문자열에서 같은 위치에 있도록 충분한 공간과 각 구성 요소를 마우스 오른쪽 패드로 다시 결합을 의미한다. 이것은 각 구성 요소에 대해 데이터베이스의 특정 길이를 초과 할 수 없다는 것을 확신 할 수있는 경우에만 안정적으로 작동합니다.

나는이 제안을 역설이나 델파이에 대한 지식이 거의 없거나 전혀 없기 때문에 소금물로 제 제안을 받아 들여야합니다.

+1

을 소금의 전체 항아리와 내가 꽤 생각을 잡아 ... 3. 재미있는 것 같다하지만 당신은 나에게 올바른 방향을 제시 할 수있는 샘플로 날을 제공 할 수 있다면, 그것은 수 더 편리 할 ^^ – Darkendorf

관련 문제