Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
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]] |