FirebirdSQL logo
 Типы данныхОператоры определения данных (DDL) 
Экранирование специальных символов

Для исключения из процесса сопоставления специальных символов (которые часто встречаются в регулярных выражениях) их надо экранировать.Специальных символов экранирования по умолчанию нет — их при необходимости определяет пользователь:

'Peer (Poire)' SIMILAR TO 'P[^ ]+ \(P[^ ]+\)' ESCAPE '\' -- TRUE
'Pera [Pear]' SIMILAR TO 'P[^ ]+ #[P[^ ]+#]' ESCAPE '#' -- TRUE
'Paron-Appledryck' SIMILAR TO 'P%$-A%' ESCAPE '$' -- TRUE
'Parondryck' SIMILAR TO 'P%--A%' ESCAPE '-' -- FALSE

IS DISTINCT FROM

Доступно в

DSQL, PSQL.

Синтаксис
<operand1> IS [NOT] DISTINCT FROM <operand2>

Два операнда считают DISTINCT (различными), если они имеют различные значения, или если одно из них — NULL, а другое нет.Они считаются NOT DISTINCT (равными), если имеют одинаковые значения или оба имеют значение NULL.

IS [NOT] DISTINCT FROM всегда возвращает TRUE или FALSE и никогда UNKNOWN (NULL) (неизвестное значение). Операторы ‘=’ и ‘<>’, наоборот, вернут UNKNOWN (NULL), если один или оба операнда имеют значение NULL.

Table 1. Результаты выполнения различных операторов сравнения

Характеристики операнда

Результаты различных операторов

=

IS NOT DISTINCT FROM

<>

IS DISTINCT FROM

Одинаковые значения

TRUE

TRUE

FALSE

FALSE

Различные значения

FALSE

FALSE

TRUE

TRUE

Оба NULL

UNKNOWN

TRUE

UNKNOWN

FALSE

Одно NULL

UNKNOWN

FALSE

UNKNOWN

TRUE

Example 1. Использование предиката IS [NOT] DISTINCT FROM
SELECT ID, NAME, TEACHER
FROM COURSES
WHERE START_DAY IS NOT DISTINCT FROM END_DAY

IF (NEW.JOB IS DISTINCT FROM OLD.JOB) THEN
  POST_EVENT 'JOB_CHANGED';