Как стать автором
Обновить

Комментарии 6

Я бы сказал — не совершенен. Еще в 11-й версии буква Ё жила отдельной жизнью, не попадая в диапазон, надо было явно в шаблоне прописывать, а тут был приятно удивлен. Механизма «Просмотр вперёд и назад» нет. Но в целом все равно выручают.
Там же в документации(прямо по своей же приведенной ссылке гляньте) указано специально про NLS_SORT:
Note: In the POSIX standard, a range includes all collation elements between the start and end of the range in the linguistic definition of the current locale. Thus, ranges are linguistic rather than byte value ranges; the semantics of the range expression are independent of the character set. In Oracle Database, the linguistic range is determined by the NLS_SORT initialization parameter.
Ну да, читал, оттуда грабли и растут :-)
Может я чего не понимаю, но зачем надо было привязывать диапазон регулярок по умолчанию к NLS_SORT?
Наверное, чтоб разрабы себе бошки поразбивали, прежде чем поймут, что вся соль в этом маленьком кусочке документации. Это же так анти-интуитивно.
А вобще, xtender, глянь на деваху лучше, как тебе ее шапочка? Ты как ACS должен был это заценить. в первую очередь :-)
Из этого абзаца следует, что при NLS_SORT=RUSSIAN буква ё таки должна попадать в диапазон [а-я]. Но вот что любопытно: при явно указанном case-sensitive снова попадать перестает.

Connected to Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 

SQL> alter session set NLS_SORT=RUSSIAN;
Session altered

SQL> alter session set NLS_COMP=LINGUISTIC;
Session altered

SQL> with ABC as (
  2    select column_value as symbol
  3    from table(sys.odcivarchar2list('А','Е','Ё','Я','а','е','ё','я'))
  4  )
  5  select symbol,
  6         nlssort(symbol) nls_code_hex
  7  from ABC
  8  order by symbol;

SYMBOL NLS_CODE_HEX
------ -------------------
А      8C000100
а      8C000200
Е      9A000100
е      9A000200
Ё      9C000100
ё      9C000200
Я      E6000100
я      E6000200

8 rows selected

SQL> select * from dual where regexp_like('ё', '[а-я]');
DUMMY
-----
X

SQL> select * from dual where regexp_like('ё', '[а-я]', 'i');
DUMMY
-----
X

SQL> select * from dual where regexp_like('ё', '[а-я]', 'c');
DUMMY
-----

SQL> 
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации