====== 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]]