Инструменты пользователя

Инструменты сайта


similar_to

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
similar_to [2009/08/05 21:19]
afgm форматирование
similar_to [2016/01/30 20:18]
46.39.231.114 [Версии сервера] - версия 2.1 SIMILAR TO не поддерживает
Строка 1: Строка 1:
 +====== SIMILAR TO ======
  
 +===== Версии сервера =====
 +^ 0.9 ^ 1.0 ^ 1.5.3 ^ 1.5.4 ^ 1.5.5 ^ 2.0 ^ 2.0.3 ^ 2.0.4 ^ 2.1 ^ 2.5 ^ 3.0 ^
 +|  -  |  -  |  -  |  -  |  -  |  -  |  -  |  -  |  - |  +  |  +  |
 +
 +===== Доступно в =====
 +[[raznovidnosti_jazyka_sql|DSQL]],​ [[raznovidnosti_jazyka_sql|ISQL]], ​ [[raznovidnosti_jazyka_sql|PSQL]]
 +
 +===== Формат =====
 +<​code>​
 +<​предикат similar> ::=
 +<​значение>​ [ NOT ] SIMILAR TO <​шаблон>​ [ ESCAPE <​специальный символ>​ ]
 +
 +<​шаблон>​ ::= <regular expression>​
 +
 +<regular expression>​ ::=
 +<regular term>
 +| <regular expression>​ <​вертикальная черта>​ <regular term>
 +
 +<regular term> ::=
 +<regular factor>
 +| <regular term> <regular factor>
 +
 +<regular factor> ::=
 +<regular primary>
 +| <regular primary> <​символ звездочка>​
 +| <regular primary> <​символ плюс>​
 +| <regular primary> <​вопросительный знак>​
 +| <regular primary> <repeat factor>
 +
 +<repeat factor> ::= <​открывающая фигурная скобка>​ <​нижняя граница>​
 +[ <​запятая>​ [ <​верхняя граница>​ ] ] <​закрывающая фигурная скобка>​
 +
 +<​нижняя граница>​ ::= <​неотрицательное целое>​
 +
 +<​верхняя граница>​ ::= <​неотрицательное целое>​
 +
 +<regular primary> ::=
 +<​символьный спецификатор>​
 +| <​символ процента>​
 +| <regular character set>
 +| <​открывающая круглая скобка>​ <regular expression>​ <​закрывающая круглая скобка>​
 +
 +<​символьный спецификатор>​ ::=
 +<​обычный символ>​
 +| <escaped character>​
 +
 +<regular character set> ::=
 +<​символ подчеркивания>​
 +| <​открывающая квадратная скобка>​ <​перечисление символов>​... <​закрыв. квадратная скобка>​
 +| <​открывающая квадратная скобка>​ <​символ циркумфлекс>​ <​перечисление символов>​...
 +<​закрывающая квадратная скобка>​
 +| <​открывающая квадратная скобка>​ <​перечисление включения>​... <​символ циркумфлекс>​
 +<​перечисление исключения>​... <​закрывающая квадратная скобка>​
 +
 +<​перечисление включения>​ ::= <​перечисление символов>​
 +
 +<​перечисление исключения>​ ::= <​перечисление символов>​
 +
 +<​перечисление символов>​ ::=
 +<​символьный спецификатор>​
 +| <​символьный спецификатор>​ <​символ минус>​ <​символьный спецификатор>​
 +| <​открывающая квадратная скобка>​ <​символ двоеточие>​ <​идентификатор класса символа>​
 +<​символ двоеточие>​ <​закрывающая квадратная скобка>​
 +
 +<​идентификатор класса символа>​ ::=
 +ALPHA
 +| UPPER
 +| LOWER
 +| DIGIT
 +| SPACE
 +| WHITESPACE
 +| ALNUM
 +
 +<​символ циркумфлекс>​ ::= ^
 +
 +<​вертикальная черта>​ ::= |
 +
 +<​символ звездочка>​ ::= *
 +</​code>​
 +===== Описание =====
 +Для поддержки регулярных выражений добавлен новый предикат SIMILAR TO. Предикат проверяет,​
 +соответствует ли строковый аргумент заданному регулярному выражению (согласно стандарту SQL).
 +Предикат может быть использован в любом контексте,​ который принимает булевы (логические)
 +выражения,​ такие как предложения WHERE, ограничения CHECK и PSQL-оператор IF().
 +
 +==== Идентификаторы класса символа ====
 +
 +^ Идентификатор ^ Описание ^ Примечание ^
 +| ALPHA | Все латинские буквы (a-z, A-Z) | Включает и латинские буквы с ударениями,​\\ если используется последовательность сортировки,​\\ нечувствительная к ударению |
 +| UPPER | Все прописные латинские буквы (A-Z) | Включает строчные буквы,​\\ если используется регистронезависимая последовательность сортировки |
 +| LOWER | Все строчные латинские буквы (a-z) | Включает прописные буквы,​\\ если используется регистронезависимая последовательность сортировки |
 +| DIGIT | Все арабские цифры (0-9) | |
 +| SPACE | Пробел (ASCII 32) | |
 +| WHITESPACE | Все символы-разделители\\ (горизонтальная табуляция (9), перевод строки (10),\\ вертикальная табуляция (11), возврат каретки (13),\\ перевод страницы (12), пробел (32)) | |
 +| ALNUM | Все латинские буквы (ALPHA) и арабские цифры (DIGIT) | |
 +
 +
 +==== Руководство к использованию ====
 +Возвращает ИСТИНУ для строк, которые соответствуют хотя бы одному из перечисленных элементов
 +регулярного выражения:​ <regular expression>​ <​вертикальная черта>​ <regular term>
 +<​code>​
 +'​ab'​ SIMILAR TO '​ab|cd|efg' ​ -- истина
 +'​efg'​ SIMILAR TO '​ab|cd|efg'​ -- истина
 +'​a'​ SIMILAR TO '​ab|cd|efg' ​  -- ложь
 +</​code>​
 +
 +Проверяет нулевое или большее количество вхождений <regular primary> в строку:​ <regular primary>
 +<​символ звездочка>​
 +<​code>​
 +''​ SIMILAR TO '​a*' ​   -- истина
 +'​a'​ SIMILAR TO '​a*' ​  -- истина
 +'​aaa'​ SIMILAR TO '​a*'​ -- истина
 +</​code>​
 +
 +Проверяет одинарное или большее количество вхождений <regular primary> в строку:​ <regular primary>
 +<​символ плюс>​
 +<​code>​
 +''​ SIMILAR TO '​a+' ​   -- ложь
 +'​a'​ SIMILAR TO '​a+' ​  -- истина
 +'​aaa'​ SIMILAR TO '​a+'​ -- истина
 +</​code>​
 +
 +Проверяет одинарное или нулевое количество вхождений <regular primary> в строку:​ <regular primary>
 +<​вопросительный знак>​
 +<​code>​
 +''​ SIMILAR TO '​a?' ​   -- истина
 +'​a'​ SIMILAR TO '​a?' ​  -- истина
 +'​aaa'​ SIMILAR TO '​a?'​ -- ложь
 +</​code>​
 +
 +Проверяет точное количество (<low value>) вхождений <regular primary> в строку:​ <regular primary>
 +<​открывающая фигурная скобка>​ <​нижняя граница>​ <​закрывающая фигурная скобка>​
 +<​code>​
 +''​ SIMILAR TO '​a{2}' ​   -- ложь
 +'​a'​ SIMILAR TO '​a{2}' ​  -- ложь
 +'​aa'​ SIMILAR TO '​a{2}' ​ -- истина
 +'​aaa'​ SIMILAR TO '​a{2}'​ -- ложь
 +</​code>​
 +
 +Проверяет точное (<low value>) или большее количество вхождений <regular primary> в строку:​
 +<regular primary> <​открывающая фигурная скобка>​ <​нижняя граница>​ <​запятая>​
 +<​закрывающая фигурная скобка>:​
 +<​code>​
 +''​ SIMILAR TO '​a{2,​}' ​   -- ложь
 +'​a'​ SIMILAR TO '​a{2,​}' ​  -- ложь
 +'​aa'​ SIMILAR TO '​a{2,​}' ​ -- истина
 +'​aaa'​ SIMILAR TO '​a{2,​}'​ -- истина
 +</​code>​
 +
 +Проверяет количество вхождений <regular primary> в строку от <low value> до <high value>:
 +<regular primary> <​открывающая фигурная скобка>​ <​нижняя граница>​ <​запятая>​ <​верхняя граница>​
 +<​закрывающая фигурная скобка>:​
 +<​code>​
 +''​ SIMILAR TO '​a{0,​4}' ​     -- истина
 +''​ SIMILAR TO '​a{2,​4}' ​     -- ложь
 +'​a'​ SIMILAR TO '​a{2,​4}' ​    -- ложь
 +'​aa'​ SIMILAR TO '​a{2,​4}' ​   -- истина
 +'​aaa'​ SIMILAR TO '​a{2,​4}' ​  -- истина
 +'​aaaa'​ SIMILAR TO '​a{2,​4}' ​ -- истина
 +'​aaaaa'​ SIMILAR TO '​a{2,​4}'​ -- ложь
 +</​code>​
 +
 +Проверяет наличие любого (непустого) символа:​ <​символ подчеркивания>​
 +<​code>​
 +''​ SIMILAR TO '​_' ​       -- ложь
 +'​a'​ SIMILAR TO '​_' ​      -- истина
 +'​1'​ SIMILAR TO '​_' ​      -- истина
 +'​a1'​ SIMILAR TO '​_' ​     -- ложь
 +'​a1'​ SIMILAR TO '​__' ​    -- истина
 +'​a1#​@'​ SIMILAR TO '​a_#​_'​ -- истина
 +</​code>​
 +
 +Проверяет наличие любой строки любой длины (включая пустую строку):​ <​символ процент>​
 +<​code>​
 +''​ SIMILAR TO '​%' ​       -- истина
 +'​az'​ SIMILAR TO '​a%z' ​   -- истина
 +'​a123z'​ SIMILAR TO '​a%z'​ -- истина
 +'​azx'​ SIMILAR TO '​a%z' ​  -- ложь
 +</​code>​
 +
 +Использование цельного регулярного выражения в качестве подвыражения:​
 +<​открывающая круглая скобка>​ <regular expression>​ <​закрывающая круглая скобка>​
 +<​code>​
 +'​ab'​ SIMILAR TO '​(ab){2}' ​  -- ложь
 +'​aabb'​ SIMILAR TO '​(ab){2}'​ -- ложь
 +'​abab'​ SIMILAR TO '​(ab){2}'​ -- истина
 +</​code>​
 +
 +Проверяет символ на соответствие одному из перечисления:​ <​открывающая квадратная скобка>​
 +<​перечисление символов>​ <​закрывающая квадратная скобка>​
 +<​code>​
 +'​b'​ SIMILAR TO '​[abc]'​ -- истина
 +'​d'​ SIMILAR TO '​[abc]'​ -- ложь
 +'​9'​ SIMILAR TO '​[0-9]'​ -- истина
 +'​9'​ SIMILAR TO '​[0-8]'​ -- ложь
 +'​8'​ SIMILAR TO '​[7-9]'​ -- истина
 +'​8'​ SIMILAR TO '​[9-7]'​ -- истина
 +</​code>​
 +
 +Проверяет символ на отсутствие в перечислении:​ <​открывающая квадратная скобка>​
 +<​символ циркумфлекс>​ <​перечисление символов>​ <​закрывающая квадратная скобка>​
 +<​code>​
 +'​b'​ SIMILAR TO '​[^abc]'​ -- ложь
 +'​d'​ SIMILAR TO '​[^abc]'​ -- истина
 +</​code>​
 +
 +Проверяет символ на наличие в перечислении <​перечисление включения>,​ но отсутствие в
 +перечислении <​перечисление исключения>:​ <​открывающая квадратная скобка>​
 +<​перечисление включения>​ <​символ циркумфлекс>​ <​перечисление исключения>​
 +<​закрывающая квадратная скобка>​
 +<​code>​
 +'​b'​ SIMILAR TO '​[abc^d]' ​      -- истина
 +'​b'​ SIMILAR TO '​[a-d^b]' ​      -- ложь
 +'​b'​ SIMILAR TO '​[abc^b]' ​      -- ложь
 +'​3'​ SIMILAR TO '​[[:​DIGIT:​]^3]'​ -- ложь
 +'​4'​ SIMILAR TO '​[[:​DIGIT:​]^3]'​ -- истина
 +</​code>​
 +
 +Проверяет символ на принадлежность классу <​идентификатор класса символа>​ (допустимые
 +идентификаторы классов приведены в таблице 7.1); может быть использовано с символом
 +циркумфлекс,​ чтобы инвертировать логику:​ <​открывающая квадратная скобка>​ <​символ двоеточие>​
 +<​идентификатор класса символа>​ <​символ двоеточие>​ <​закрывающая квадратная скобка>​
 +<​code>​
 +'​4'​ SIMILAR TO '​[[:​DIGIT:​]]' ​ -- истина
 +'​a'​ SIMILAR TO '​[[:​DIGIT:​]]' ​ -- ложь
 +'​4'​ SIMILAR TO '​[^[:​DIGIT:​]]'​ -- ложь
 +'​a'​ SIMILAR TO '​[^[:​DIGIT:​]]'​ -- истина
 +</​code>​
 +
 +Пример использования специального символа <escape character>​
 +<​code>​
 +'​('​ SIMILAR TO '#​('​ ESCAPE '#'​ -- истина
 +'#'​ SIMILAR TO '##'​ ESCAPE '#'​ -- истина
 +'#'​ SIMILAR TO '#'​ ESCAPE '#' ​ -- ошибка
 +</​code>​
 +
 +===== Пример =====
 +<code sql>
 +create table department (
 +  number numeric(3) not null,
 +  name varchar(25) not null,
 +  phone varchar(14)
 +  check (phone similar to '​\([0-9]{3}\) [0-9]{3}\-[0-9]{4}'​ escape '​\'​)
 +);
 +
 +insert into department
 +  values ('​000',​ '​Corporate Headquarters',​ '(408) 555-1234'​);​
 +insert into department
 +  values ('​100',​ 'Sales and Marketing',​ '(415) 555-1234'​);​
 +insert into department
 +  values ('​140',​ 'Field Office: Canada',​ '(416) 677-1000'​);​
 +insert into department
 +  values ('​600',​ '​Engineering',​ '(408) 555-123'​);​ -- нарушение условия check
 +
 +select * from department
 +  where phone not similar to '​\([0-9]{3}\) 555\-%'​ escape '​\';​
 +</​code>​
 +
 +===== См. также =====
 +
 +
 +===== Источник =====
 +%Firebird%\doc\
 +
 +[[http://​groups.google.com/​group/​firebirddocrussian?​lnk=srg|firebird.doc.russian]]
similar_to.txt · Последние изменения: 2016/01/30 20:18 — 46.39.231.114