====== 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]]
===== Формат =====
<предикат similar> ::=
<значение> [ NOT ] SIMILAR TO <шаблон> [ ESCAPE <специальный символ> ]
<шаблон> ::=
::=
| <вертикальная черта>
::=
|
::=
| <символ звездочка>
| <символ плюс>
| <вопросительный знак>
|
::= <открывающая фигурная скобка> <нижняя граница>
[ <запятая> [ <верхняя граница> ] ] <закрывающая фигурная скобка>
<нижняя граница> ::= <неотрицательное целое>
<верхняя граница> ::= <неотрицательное целое>
::=
<символьный спецификатор>
| <символ процента>
|
| <открывающая круглая скобка> <закрывающая круглая скобка>
<символьный спецификатор> ::=
<обычный символ>
|
::=
<символ подчеркивания>
| <открывающая квадратная скобка> <перечисление символов>... <закрыв. квадратная скобка>
| <открывающая квадратная скобка> <символ циркумфлекс> <перечисление символов>...
<закрывающая квадратная скобка>
| <открывающая квадратная скобка> <перечисление включения>... <символ циркумфлекс>
<перечисление исключения>... <закрывающая квадратная скобка>
<перечисление включения> ::= <перечисление символов>
<перечисление исключения> ::= <перечисление символов>
<перечисление символов> ::=
<символьный спецификатор>
| <символьный спецификатор> <символ минус> <символьный спецификатор>
| <открывающая квадратная скобка> <символ двоеточие> <идентификатор класса символа>
<символ двоеточие> <закрывающая квадратная скобка>
<идентификатор класса символа> ::=
ALPHA
| UPPER
| LOWER
| DIGIT
| SPACE
| WHITESPACE
| ALNUM
<символ циркумфлекс> ::= ^
<вертикальная черта> ::= |
<символ звездочка> ::= *
===== Описание =====
Для поддержки регулярных выражений добавлен новый предикат 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) | |
==== Руководство к использованию ====
Возвращает ИСТИНУ для строк, которые соответствуют хотя бы одному из перечисленных элементов
регулярного выражения: <вертикальная черта>
'ab' SIMILAR TO 'ab|cd|efg' -- истина
'efg' SIMILAR TO 'ab|cd|efg' -- истина
'a' SIMILAR TO 'ab|cd|efg' -- ложь
Проверяет нулевое или большее количество вхождений в строку:
<символ звездочка>
'' SIMILAR TO 'a*' -- истина
'a' SIMILAR TO 'a*' -- истина
'aaa' SIMILAR TO 'a*' -- истина
Проверяет одинарное или большее количество вхождений в строку:
<символ плюс>
'' SIMILAR TO 'a+' -- ложь
'a' SIMILAR TO 'a+' -- истина
'aaa' SIMILAR TO 'a+' -- истина
Проверяет одинарное или нулевое количество вхождений в строку:
<вопросительный знак>
'' SIMILAR TO 'a?' -- истина
'a' SIMILAR TO 'a?' -- истина
'aaa' SIMILAR TO 'a?' -- ложь
Проверяет точное количество () вхождений в строку:
<открывающая фигурная скобка> <нижняя граница> <закрывающая фигурная скобка>
'' SIMILAR TO 'a{2}' -- ложь
'a' SIMILAR TO 'a{2}' -- ложь
'aa' SIMILAR TO 'a{2}' -- истина
'aaa' SIMILAR TO 'a{2}' -- ложь
Проверяет точное () или большее количество вхождений в строку:
<открывающая фигурная скобка> <нижняя граница> <запятая>
<закрывающая фигурная скобка>:
'' SIMILAR TO 'a{2,}' -- ложь
'a' SIMILAR TO 'a{2,}' -- ложь
'aa' SIMILAR TO 'a{2,}' -- истина
'aaa' SIMILAR TO 'a{2,}' -- истина
Проверяет количество вхождений в строку от до :
<открывающая фигурная скобка> <нижняя граница> <запятая> <верхняя граница>
<закрывающая фигурная скобка>:
'' 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}' -- ложь
Проверяет наличие любого (непустого) символа: <символ подчеркивания>
'' SIMILAR TO '_' -- ложь
'a' SIMILAR TO '_' -- истина
'1' SIMILAR TO '_' -- истина
'a1' SIMILAR TO '_' -- ложь
'a1' SIMILAR TO '__' -- истина
'a1#@' SIMILAR TO 'a_#_' -- истина
Проверяет наличие любой строки любой длины (включая пустую строку): <символ процент>
'' SIMILAR TO '%' -- истина
'az' SIMILAR TO 'a%z' -- истина
'a123z' SIMILAR TO 'a%z' -- истина
'azx' SIMILAR TO 'a%z' -- ложь
Использование цельного регулярного выражения в качестве подвыражения:
<открывающая круглая скобка> <закрывающая круглая скобка>
'ab' SIMILAR TO '(ab){2}' -- ложь
'aabb' SIMILAR TO '(ab){2}' -- ложь
'abab' SIMILAR TO '(ab){2}' -- истина
Проверяет символ на соответствие одному из перечисления: <открывающая квадратная скобка>
<перечисление символов> <закрывающая квадратная скобка>
'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]' -- истина
Проверяет символ на отсутствие в перечислении: <открывающая квадратная скобка>
<символ циркумфлекс> <перечисление символов> <закрывающая квадратная скобка>
'b' SIMILAR TO '[^abc]' -- ложь
'd' SIMILAR TO '[^abc]' -- истина
Проверяет символ на наличие в перечислении <перечисление включения>, но отсутствие в
перечислении <перечисление исключения>: <открывающая квадратная скобка>
<перечисление включения> <символ циркумфлекс> <перечисление исключения>
<закрывающая квадратная скобка>
'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]' -- истина
Проверяет символ на принадлежность классу <идентификатор класса символа> (допустимые
идентификаторы классов приведены в таблице 7.1); может быть использовано с символом
циркумфлекс, чтобы инвертировать логику: <открывающая квадратная скобка> <символ двоеточие>
<идентификатор класса символа> <символ двоеточие> <закрывающая квадратная скобка>
'4' SIMILAR TO '[[:DIGIT:]]' -- истина
'a' SIMILAR TO '[[:DIGIT:]]' -- ложь
'4' SIMILAR TO '[^[:DIGIT:]]' -- ложь
'a' SIMILAR TO '[^[:DIGIT:]]' -- истина
Пример использования специального символа
'(' SIMILAR TO '#(' ESCAPE '#' -- истина
'#' SIMILAR TO '##' ESCAPE '#' -- истина
'#' SIMILAR TO '#' ESCAPE '#' -- ошибка
===== Пример =====
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 '\';
===== См. также =====
===== Источник =====
%Firebird%\doc\
[[http://groups.google.com/group/firebirddocrussian?lnk=srg|firebird.doc.russian]]