Oracle 8i игнорирует '+' в VARCHAR2 при сортировке в SELECTе
От: Artemy  
Дата: 14.02.06 16:39
Оценка:
Доброго времени суток.

У меня небольшой вопрос.

В 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

У кого-нибудь есть предположения, почему он так "плохо" сортирует? Буду признателен, если вы ими поделитесь.

Спасибо.
Re: Oracle 8i игнорирует '+' в VARCHAR2 при сортировке в SEL
От: Denis Popov Россия http://picasaweb.google.com/denislpopov
Дата: 14.02.06 17:04
Оценка: 3 (1)
Здравствуйте, 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.
Re[2]: Oracle 8i игнорирует '+' в VARCHAR2 при сортировке в
От: biochemist СССР https://www.anekdot.ru/i/caricatures/normal/20/7/27/1595846503.jpg
Дата: 15.02.06 04:07
Оценка: 3 (1)
Здравствуйте, Denis Popov, Вы писали:

DP>

SQL>> alter session set nls_sort = binary;


Если не менять параметры сессии, то можно:
1
order by ltrim(value, '+');

2
order by NLSSORT(value, ’NLS_SORT = binary’);
«Национализм во мне столь естественный, что никогда никаким интернационалистам его из меня не вытравить»
Менделеев Д. И.
Re: Oracle 8i игнорирует '+' в VARCHAR2 при сортировке в SEL
От: Artemy  
Дата: 15.02.06 08:00
Оценка:
Спасибо всем.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.