Доброго времени суток.
У меня небольшой вопрос.
В Oracle 8i (не спрашивайте, почему 8i: потому что проект старый) выбираю с помощью SELECT данные из поля таблицы типа VARCHAR2. Сортирую по возрастанию. Но при сортировке, похоже, что Oracle игнорирует символ '+' или, может быть, руководствуется другим принципом. Пример возвращенных данных:
+01732879611
07755544410
07766666600
07766666610
07876910000
+73535550100
+75551112244
+791844202
+79995556664
80004444100
А хотелось бы чтобы было что-то типа:
+01732879611
+73535550100
+75551112244
+791844202
+79995556664
07755544410
07766666600
07766666610
07876910000
80004444100
У кого-нибудь есть предположения, почему он так "плохо" сортирует? Буду признателен, если вы ими поделитесь.
Спасибо.
Здравствуйте, Artemy.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.6.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.6.0 - Production
SQL> alter session set nls_sort = russian;
Session altered.
SQL> select value
2 from (select '+01732879611' value from dual union all
3 select '07755544410' value from dual union all
4 select '07766666600' value from dual union all
5 select '07766666610' value from dual union all
6 select '07876910000' value from dual union all
7 select '+73535550100' value from dual union all
8 select '+75551112244' value from dual union all
9 select '+791844202' value from dual union all
10 select '+79995556664' value from dual union all
11 select '80004444100' value from dual
12 )
13 order by value;
VALUE
------------
+01732879611
07755544410
07766666600
07766666610
07876910000
+73535550100
+75551112244
+791844202
+79995556664
80004444100
10 rows selected.
SQL> alter session set nls_sort = binary;
Session altered.
SQL> select value
2 from (select '+01732879611' value from dual union all
3 select '07755544410' value from dual union all
4 select '07766666600' value from dual union all
5 select '07766666610' value from dual union all
6 select '07876910000' value from dual union all
7 select '+73535550100' value from dual union all
8 select '+75551112244' value from dual union all
9 select '+791844202' value from dual union all
10 select '+79995556664' value from dual union all
11 select '80004444100' value from dual
12 )
13 order by value;
VALUE
------------
+01732879611
+73535550100
+75551112244
+791844202
+79995556664
07755544410
07766666600
07766666610
07876910000
80004444100
10 rows selected.
Здравствуйте, Denis Popov, Вы писали:
DP>
SQL>> alter session set nls_sort = binary;
Если не менять параметры сессии, то можно:
1
order by ltrim(value, '+');
2
order by NLSSORT(value, ’NLS_SORT = binary’);
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.