2009-09-15 7 views
1

오라클 데이터베이스에서 나와 동일한 방식으로 문자열 목록을 정렬해야합니다. 불행히도 오라클은 알파벳 문자 뒤에 숫자 문자를 정렬하는 방식으로 반환합니다. 예 :C# 문자열 정렬 VS Oracle 문자열 정렬

이렇게하면 C#으로 문자열 목록을 정렬 할 수 있습니까?

답변

0

StringComparer에서 파생 된 사용자 지정 클래스를 구현하여 결과를 정확하게 복제 할 수 있습니다.

그러나 오라클의 문자열 정렬은 데이터베이스/테이블/쿼리에 사용되는 데이터 정렬에 따라 결정되므로 동일한 문화권을 사용하여 정렬 할 때 일 수 있습니다.은 독자적으로 너무 많이 작성하지 않고 동일한 결과를 얻습니다.

0

자신 만의 IComparer 클래스를 만들고이 인스턴스를 사용하여 문자열 목록을 정렬 할 수 있습니다.

List<T>에는 주문 논리를 구현할 수있는 IComparer 또는 Comparision을 사용하는 'Sort'멤버 메서드가 있습니다.

3

오라클은 여러 가지 방법으로 정렬 할 수 있습니다. 기본적으로 Oracle은 문자열 (VARCHAR)을 바이너리 방식으로 정렬합니다. 즉, 문자열은 데이터베이스 문자 집합의 각 문자의 숫자 값으로 정렬됩니다.

SQL> alter session set nls_sort=french; 

Session altered 

SQL> SELECT rownum, chr(ROWNUM) FROM dual CONNECT BY LEVEL <= 127 ORDER BY 2; 

    ROWNUM CHR(ROWNUM) 
---------- ----------- 
[...] 
     65 A 
     97 a 
     66 B 
     98 b 
[...] 
     90 Z 
     122 z 
     48 0 
     49 1 
     50 2 
[...] 
:

SQL> select * from nls_session_parameters where parameter like '%SORT%'; 

PARAMETER VALUE 
---------- ---------- 
NLS_SORT BINARY 

SQL> SELECT rownum, chr(ROWNUM) FROM dual CONNECT BY LEVEL <= 127 ORDER BY 2; 

    ROWNUM CHR(ROWNUM) 
---------- ----------- 
[...] 
     48 0 
     49 1 
     50 2 
     51 3 
[...] 
     65 A 
     66 B 
     67 C 
     68 D 
[...] 
     97 a 
     98 b 
     99 c 

당신은 정렬 동작을 변경할 수 있습니다