Сортировка строк c # VS Сортировка строк Oracle - PullRequest
1 голос
/ 15 сентября 2009

Я должен отсортировать список строк точно так же, как они возвращаются мне из базы данных оракула. К сожалению, Oracle возвращает их таким образом, что числовые символы сортируются по алфавиту. Например:

Alabama
x-men
100 new ideas
9 months
...

Как я могу отсортировать список строк в C # таким образом?

Ответы [ 3 ]

3 голосов
/ 15 сентября 2009

Oracle можно сортировать несколькими способами. По умолчанию Oracle сортирует строки (VARCHAR) в двоичном виде, то есть строки сортируются по числовым значениям каждого символа в наборе символов базы данных.

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

Вы можете изменить поведение сортировки:

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
[...]
0 голосов
/ 15 сентября 2009

Вы можете создать свой собственный класс IComparer и использовать этот экземпляр для сортировки списка строк.

List<T> имеет метод-член 'Sort', который принимает IComparer или Comparision, в котором вы можете реализовать свою логику заказа.

0 голосов
/ 15 сентября 2009

Вы можете реализовать собственный класс, производный от StringComparer , чтобы точно повторить результаты.

Однако вероятность сортировки строк в Oracle определяется сортировкой, используемой в базе данных / таблице / запросе, поэтому при использовании той же культуры для сортировки может получить те же результаты, не прибегая к чрезмерной записи в свой собственный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...