오라클 데이터베이스에서 나와 동일한 방식으로 문자열 목록을 정렬해야합니다. 불행히도 오라클은 알파벳 문자 뒤에 숫자 문자를 정렬하는 방식으로 반환합니다. 예 :C# 문자열 정렬 VS Oracle 문자열 정렬
이렇게하면 C#으로 문자열 목록을 정렬 할 수 있습니까?
오라클 데이터베이스에서 나와 동일한 방식으로 문자열 목록을 정렬해야합니다. 불행히도 오라클은 알파벳 문자 뒤에 숫자 문자를 정렬하는 방식으로 반환합니다. 예 :C# 문자열 정렬 VS Oracle 문자열 정렬
이렇게하면 C#으로 문자열 목록을 정렬 할 수 있습니까?
StringComparer에서 파생 된 사용자 지정 클래스를 구현하여 결과를 정확하게 복제 할 수 있습니다.
그러나 오라클의 문자열 정렬은 데이터베이스/테이블/쿼리에 사용되는 데이터 정렬에 따라 결정되므로 동일한 문화권을 사용하여 정렬 할 때 일 수 있습니다.은 독자적으로 너무 많이 작성하지 않고 동일한 결과를 얻습니다.
자신 만의 IComparer 클래스를 만들고이 인스턴스를 사용하여 문자열 목록을 정렬 할 수 있습니다.
List<T>
에는 주문 논리를 구현할 수있는 IComparer 또는 Comparision을 사용하는 'Sort'멤버 메서드가 있습니다.
오라클은 여러 가지 방법으로 정렬 할 수 있습니다. 기본적으로 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
당신은 정렬 동작을 변경할 수 있습니다