Содержание
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 |
---|---|---|---|---|---|---|---|---|---|---|
- | - | - | - | - | - | - | - | - | + | + |
Доступно в
Формат
<предикат 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 <символ циркумфлекс> ::= ^ <вертикальная черта> ::= | <символ звездочка> ::= *
Описание
Для поддержки регулярных выражений добавлен новый предикат 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>
'ab' SIMILAR TO 'ab|cd|efg' -- истина 'efg' SIMILAR TO 'ab|cd|efg' -- истина 'a' SIMILAR TO 'ab|cd|efg' -- ложь
Проверяет нулевое или большее количество вхождений <regular primary> в строку: <regular primary> <символ звездочка>
'' SIMILAR TO 'a*' -- истина 'a' SIMILAR TO 'a*' -- истина 'aaa' SIMILAR TO 'a*' -- истина
Проверяет одинарное или большее количество вхождений <regular primary> в строку: <regular primary> <символ плюс>
'' SIMILAR TO 'a+' -- ложь 'a' SIMILAR TO 'a+' -- истина 'aaa' SIMILAR TO 'a+' -- истина
Проверяет одинарное или нулевое количество вхождений <regular primary> в строку: <regular primary> <вопросительный знак>
'' SIMILAR TO 'a?' -- истина 'a' SIMILAR TO 'a?' -- истина 'aaa' SIMILAR TO 'a?' -- ложь
Проверяет точное количество (<low value>) вхождений <regular primary> в строку: <regular primary> <открывающая фигурная скобка> <нижняя граница> <закрывающая фигурная скобка>
'' SIMILAR TO 'a{2}' -- ложь 'a' SIMILAR TO 'a{2}' -- ложь 'aa' SIMILAR TO 'a{2}' -- истина 'aaa' SIMILAR TO 'a{2}' -- ложь
Проверяет точное (<low value>) или большее количество вхождений <regular primary> в строку: <regular primary> <открывающая фигурная скобка> <нижняя граница> <запятая> <закрывающая фигурная скобка>:
'' SIMILAR TO 'a{2,}' -- ложь 'a' SIMILAR TO 'a{2,}' -- ложь 'aa' SIMILAR TO 'a{2,}' -- истина 'aaa' SIMILAR TO 'a{2,}' -- истина
Проверяет количество вхождений <regular primary> в строку от <low value> до <high value>: <regular primary> <открывающая фигурная скобка> <нижняя граница> <запятая> <верхняя граница> <закрывающая фигурная скобка>:
'' 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' -- ложь
Использование цельного регулярного выражения в качестве подвыражения: <открывающая круглая скобка> <regular expression> <закрывающая круглая скобка>
'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:]]' -- истина
Пример использования специального символа <escape character>
'(' 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\
Обсуждение