FirebirdSQL logo

RDB$GET_CONTEXT()

Доступно в

DSQL, PSQL

Синтаксис
RDB$GET_CONTEXT('<namespace>', 'varname')

<namespace> ::= SYSTEM | DDL_TRIGGER | USER_SESSION | USER_TRANSACTION
Table 1. Параметры функции RDB$GET_CONTEXT
Параметр Описание

namespace

Пространство имён.

varname

Имя переменной.Зависит от регистра.Максимальная длина 80 байт.

Тип возвращаемого результата:

VARCHAR(255) CHARACTER SET NONE

Функция RDB$GET_CONTEXT возвращает значение контекстной переменной из одного из пространства имён.

В настоящий момент существуют следующие пространства имён:

  • SYSTEM — предоставляет доступ к системным контекстным переменным. Эти переменные доступны только для чтения;

  • USER_SESSION — предоставляет доступ к пользовательским контекстным переменным, заданным через функцию RDB$SET_CONTEXT. Переменные существуют в течение подключения;

  • USER_TRANSACTION — предоставляет доступ к пользовательским контекстным переменным, заданным через функцию RDB$SET_CONTEXT. Переменные существуют в течение транзакции;

  • DDL_TRIGGER — предоставляет доступ к системным контекстным переменным, доступным только во время выполнения DDL триггера. Эти переменные доступны только для чтения.

Пространства имён USER_SESSION и USER_TRANSACTION — изначально пусты и пользователь сам создаёт переменные и наполняет их при помощи функции RDB$SET_CONTEXT.

Note

Для предотвращения DoS атак, существует ограничение на 1000 переменных в одном “пространстве имён”.

Если запрашиваемая функцией переменная существует в указанном пространстве имён, то будет возвращено её значение в виде строки VARCHAR(255) CHARACTER SET NONE.При обращении к несуществующей переменной в пространстве SYSTEM возникает ошибка, если такое происходит с пространствами имён USER_SESSION или USER_TRANSACTION — функция возвращает NULL.

Пространство имён SYSTEM

Переменные пространства имён SYSTEM
CLIENT_ADDRESS

Адрес клиента. Для TCP – IP адрес, для XNET – локальный ID процесса. Дляостальных случаев NULL.

CLIENT_HOST

Имя хоста сетевого протокола удаленного клиента. Значениевозвращается для всех поддерживаемых протоколов.

CLIENT_OS_USER

Имя пользователя операционной системы на клиентском компьютере.

CLIENT_PID

PID процесса на клиентском компьютере.

CLIENT_PROCESS

Полный путь к клиентскому приложению, подключившемуся к базеданных.

CLIENT_VERSION

Версия клиентской библиотеки (fbclient), используемой клиентским приложением.

CURRENT_ROLE

Глобальная переменная CURRENT_ROLE.

CURRENT_USER

Глобальная переменная CURRENT_USER.

DB_NAME

Каноническое имя текущей базы данных. Это либо имя псевдонима(если соединение с помощью имён файлов запрещено DatabaseAccess = NONE) или,в противном случае, полностью расширенное имя файла базы данных.

DB_FILE_ID

Уникальный идентификатор текущей базы данных на уровнефайловой системы.

DB_GUID

GUID базы данных.

EFFECTIVE_USER

Эффективный пользователь в текущий момент. Указываетпользователя с привилегиями которого в текущий момент временивыполняется процедура, функция или триггер.

ENGINE_VERSION

Версия сервера Firebird.

EXT_CONN_POOL_SIZE

Размер пула внешних соединений.

EXT_CONN_POOL_LIFETIME

Время жизни неактивных соединений в пуле внешнихсоединений.

EXT_CONN_POOL_IDLE_COUNT

Текущее количество неактивных соединений в пуле внешнихсоединений.

EXT_CONN_POOL_ACTIVE_COUNT

Текущее количество активных соединений в пуле внешнихсоединений.

GLOBAL_CN

Последнее значение текущего глобального счётчика Commit Number

ISOLATION_LEVEL

Уровень изоляции текущей транзакции — CURRENT_TRANSACTION.Значения: 'READ_COMMITED', 'SNAPSHOT' или 'CONSISTENCY'.

LOCK_TIMEOUT

Время ожидания транзакцией высвобождения ресурса приблокировке, в секундах.

NETWORK_PROTOCOL

Протокол, используемый для соединения с базой данных.Возможные значения: 'TCPv4', 'TCPv6', 'WNET', 'XNET', NULL.

PARALLEL_WORKERS

Максимальное количество параллельных рабочих процессов в текущем подключении.

READ_ONLY

Отображает, является ли транзакция, транзакцией только длячтения. 'FALSE' для Read-Write транзакций 'TRUE' для Read Only.

REPLICA_MODE

Режим репликации: пустая строка или NULL — первичная база данных,'READ-ONLY' — реплика в режиме только чтение, 'READ-WRITE' — реплика в режиме чтение и запись.

REPLICATION_SEQUENCE

Текущее значение последовательности репликации (номерпоследнего сегмента, записанного в журнал репликации).

SESSION_ID

Глобальная переменная CURRENT_CONNECTION.

SESSION_IDLE_TIMEOUT

Содержит текущее значение тайм-аут простоя соединения всекундах, который был установлен на уровне соединения, или ноль,если тайм-аут не был установлен.

SESSION_TIMEZONE

Текущий часовой пояс, установленный в текущей сессии.

SNAPSHOT_NUMBER

Номер моментального снимка базы данных: уровня транзакции(для транзакции SNAPSHOT или CONSISTENCY) или уровня запроса(для транзакции READ COMMITTED READ CONSISTENCY). NULL, еслимоментальный снимок не существует.

STATEMENT_TIMEOUT

Содержит текущее значение тайм-аута выполнения оператора вмиллисекундах, который был установлен на уровне подключения, илиноль, если тайм-аут не был установлен.

TRANSACTION_ID

Глобальная переменная CURRENT_TRANSACTION.

WIRE_COMPRESSED

Используется ли сжатие сетевого трафика. Если используетсясжатие сетевого трафика возвращает 'TRUE', если не используется — 'FALSE'. Для встроенных соединений — возвращает NULL.

WIRE_ENCRYPTED

Используется ли шифрование сетевого трафика. Еслииспользуется шифрование сетевого трафика возвращает 'TRUE', еслине используется — 'FALSE'. Для встроенных соединений — возвращает NULL.

WIRE_CRYPT_PLUGIN

Если используется шифрование сетевого трафика, то возвращаетимя текущего плагина шифрования, в противном случае NULL.

docnext count = 100

Пространство имён DDL_TRIGGER

Использование пространства имён DDL_TRIGGER допустимо, только во время работы DDL триггера.Его использование также допустимо в хранимых процедурах и функциях, вызванных триггерами DDL.

Контекст DDL_TRIGGER работает как стек.Перед возбуждением DDL триггера, значения, относящиеся к выполняемой команде, помещаются в этот стек.После завершения работы триггера значения выталкиваются.Таким образом в случае каскадных DDL операторов, когда каждая пользовательская DDL команда возбуждает DDL триггер, и этот триггер запускает другие DDL команды, с помощью EXECUTE STATEMENT, значения переменных в пространстве имён DDL_TRIGGER будут соответствовать команде, которая вызвала последний DDL триггер в стеке вызовов.

Переменные пространства имён DDL_TRIGGER
EVENT_TYPE

тип события (CREATE, ALTER, DROP).

OBJECT_TYPE

тип объекта (TABLE, VIEW и др.).

DDL_EVENT

(<ddl event item>), где <ddl_event_item> это EVENT_TYPE || ' ' || OBJECT_TYPE

OBJECT_NAME

имя объекта метаданных.

OLD_OBJECT_NAME

имя объекта метаданных до переименования.

NEW_OBJECT_NAME

имя объекта метаданных после переименования.

SQL_TEXT

текст SQL запроса.

Note

Ещё раз обратите внимание на то, что пространства имён и имена переменных регистрочувствительны, должны быть не пустыми строками, и заключены в кавычки!

Примеры

Example 1. Использование функции RDB$GET_CONTEXT
NEW.USER_ADR = RDB$GET_CONTEXT ('SYSTEM', 'CLIENT_ADDRESS');
См. также:

RDB$SET_CONTEXT.

RDB$SET_CONTEXT()

Доступно в

DSQL, PSQL

Синтаксис
RDB$SET_CONTEXT('<namespace>', 'varname', {<value> | NULL})

<namespace> ::= USER_SESSION | USER_TRANSACTION
Table 1. Параметры функции RDB$SET_CONTEXT
Параметр Описание

namespace

Пространство имён.

varname

Имя переменной.Зависит от регистра.Максимальная длина 80 байт.

value

Данные любого типа при условии, что их можно привести к типу VARCHAR(255) CHARACTER SET NONE.

Тип возвращаемого результата

INTEGER

Функция RDB$SET_CONTEXT создаёт, устанавливает значение или обнуляет переменную в одном из используемых пользователем пространстве имён: USER_SESSION или USER_TRANSACTION.

Функция возвращает 1, если переменная уже существовала до вызова и 0, если не существовала.Для удаления переменной надо установить её значение в NULL.Если данное пространство имён не существует, то функция вернёт ошибку.Пространство имён и имя переменной зависят от регистра, должны быть не пустыми строками, и заключены в кавычки.

Note
  • Пространство имён SYSTEM доступно только для чтения;

  • Максимальное число переменных в рамках одного соединения (для пространства USER_SESSION) или одной транзакции (для пространства USER_TRANSACTION) равно 1000;

  • Все переменные в пространстве имён USER_TRANSACTION сохраняются при ROLLBACK RETAIN или ROLLBACK TO SAVEPOINT, независимо от того, в какой точке во время выполнения транзакции они были установлены.

Example 1. Использование функции RDB$SET_CONTEXT
SELECT RDB$SET_CONTEXT ('USER_SESSION', 'DEBUGL', 3)
FROM RDB$DATABASE;

-- в PSQL доступен такой синтаксис
RDB$SET_CONTEXT('USER_SESSION', 'RECORDSFOUND', RECCOUNTER);

SELECT RDB$SET_CONTEXT ('USER_TRANSACTION', 'SAVEPOINTS', 'YES')
FROM RDB$DATABASE;
Example 2. Использование функций для работы с контекстными переменными
SET TERM ^;
CREATE PROCEDURE set_context(User_ID VARCHAR(40),
                             Trn_ID INT) AS
BEGIN
  RDB$SET_CONTEXT('USER_TRANSACTION', 'Trn_ID', Trn_ID);
  RDB$SET_CONTEXT('USER_TRANSACTION', 'User_ID', User_ID);
END^
SET TERM ;^

CREATE TABLE journal (
   jrn_id INTEGER NOT NULL PRIMARY KEY,
   jrn_lastuser VARCHAR(40),
   jrn_lastaddr VARCHAR(255),
   jrn_lasttran INTEGER
);

SET TERM ^;
CREATE TRIGGER UI_JOURNAL
FOR JOURNAL BEFORE INSERT OR UPDATE
AS
BEGIN
  new.jrn_lastuser = RDB$GET_CONTEXT('USER_TRANSACTION',
                                     'User_ID');
  new.jrn_lastaddr = RDB$GET_CONTEXT('SYSTEM',
                                     'CLIENT_ADDRESS');
  new.jrn_lasttran = RDB$GET_CONTEXT('USER_TRANSACTION',
                                         'Trn_ID');
END^
SET TERM ;^

EXECUTE PROCEDURE set_context('skidder', 1);

INSERT INTO journal(jrn_id) VALUES(0);

COMMIT;
См. также:

RDB$GET_CONTEXT.

Функции для работы с UUID

CHAR_TO_UUID()

Доступно в

DSQL, PSQL

Синтаксис
CHAR_TO_UUID (ascii_uuid)
Table 1. Параметры функции CHAR_TO_UUID
Параметр Описание

ascii_uuid

36-символьное представление UUID.‘-’ (дефис) в положениях 9, 14, 19 и 24; допустимые шестнадцатеричные цифры в любых других позициях, т.е.'A0bF4E45-3029-2a44-D493-4998c9b439A3'.

Тип возвращаемого результата

BINARY(16)

Функция CHAR_TO_UUID преобразует читабельную 36-ти символьную символику UUID к соответствующему 16-ти байтовому значению UUID.

Примеры CHAR_TO_UUID

Example 1. Использование функции CHAR_TO_UUID
SELECT CHAR_TO_UUID('A0bF4E45-3029-2a44-D493-4998c9b439A3') FROM rdb$database
-- returns A0BF4E4530292A44D4934998C9B439A3 (16-byte string)

SELECT CHAR_TO_UUID('A0bF4E45-3029-2A44-X493-4998c9b439A3') FROM rdb$database
-- error: -Human readable UUID argument for CHAR_TO_UUID must
-- have hex digit at position 20 instead of "X (ASCII 88)"

GEN_UUID()

Доступно в

DSQL, PSQL

Синтаксис
GEN_UUID()
Тип возвращаемого результата

BINARY(16)

Функция возвращает универсальный уникальный идентификатор ID в виде 16-байтной строки символов, отвечающий требованиям стандарта RFC-4122.Функция возвращает строку UUID 4-ой версии, где несколько битов зарезервированы, а остальные являются случайными.

Примеры GEN_UUID

Example 1. Использование функции GEN_UUID
SELECT GEN_UUID() AS GUID FROM RDB$DATABASE
GUID
========

017347BFE212B2479C00FA4323B36320
См. также:

CHAR_TO_UUID, UUID_TO_CHAR.

UUID_TO_CHAR()

Доступно в

DSQL, PSQL

Синтаксис
UUID_TO_CHAR (uuid)
Table 1. Параметры функции UUID_TO_CHAR
Параметр Описание

uuid

16-байтный UUID.

Тип возвращаемого результата

CHAR(36)

Функция UUID_TO_CHAR конвертирует 16-ти байтный UUID в его 36-ти знаковое ASCII человеко-читаемое представление.Тип возвращаемого значения CHAR(36).

Примеры UUID_TO_CHAR

Example 1. Использование функции UUID_TO_CHAR
SELECT UUID_TO_CHAR(GEN_UUID()) FROM RDB$DATABASE;

SELECT UUID_TO_CHAR(x'876C45F4569B320DBCB4735AC3509E5F') FROM RDB$DATABASE;
-- returns '876C45F4-569B-320D-BCB4-735AC3509E5F'

SELECT UUID_TO_CHAR(GEN_UUID()) FROM RDB$DATABASE;
-- returns e.g. '680D946B-45FF-DB4E-B103-BB5711529B86'

SELECT UUID_TO_CHAR('Firebird swings!') FROM RDB$DATABASE;
-- returns '46697265-6269-7264-2073-77696E677321'

Функции для работы с генераторами (последовательностями)

GEN_ID()

Доступно в

DSQL, PSQL

Синтаксис
GEN_ID (generator-name, step)
Table 1. Параметры функции GEN_ID
Параметр Описание

generator-name

Имя генератора (последовательности).

step

Шаг приращения.

Тип возвращаемого результата

BIGINT

Функция GEN_ID увеличивает значение генератора или последовательности и возвращает новое значение.

Если step равен 0, функция не будет ничего делать со значением генератора и вернёт его текущее значение.

  • Начиная с Firebird 2.0 для получения следующего значение последовательности (генератора) стало доступно использованиесовместимого с SQL-стандартом оператора NEXT VALUE FOR.

Если значение параметра step меньше нуля, произойдёт уменьшение значения генератора.Следует быть крайне аккуратным при таких манипуляциях в базе данных, они могут привести к потере целостности данных.

Примеры GEN_ID

Example 1. Использование функции GEN_ID
NEW.ID = GEN_ID (GEN_TABLE_ID, 1);

Условные функции

COALESCE()

Доступно в

DSQL, PSQL

Синтаксис
COALESCE (<exp1>, <exp2> [, <expN> ... ])
Table 1. Параметры функции COALESCE
Параметр Описание

exp1, exp2 …​ expN

Выражения любого совместимого типа.

Тип возвращаемого результата

зависит от типов входных аргументов

Функция COALESCE принимает два или более аргумента возвращает значение первого не-NULL аргумента.Если все аргументы имеют значение NULL, то и результат будет NULL.

Примеры COALESCE

Example 1. Использование функции COALESCE

В данном примере предпринимается попытка использовать все имеющиеся данные для составления полного имени.Выбирается поле NICKNAME из таблицы PERSONS.Если оно имеет значение NULL, то берётся значение из поля FIRSTNAME.Если и оно имеет значение NULL, то используется строка “'Mr./Mrs.'”.Затем к значению функции COALESCE добавляется фамилия (поле LASTNAME). Обратите внимание, что эта схема нормально работает, только если выбираемые поля имеют значение NULL или не пустое значение: если одно из них является пустой строкой, то именно оно и возвратится в качестве значения функции COALESCE.

SELECT
  COALESCE(PE.NICKNAME, PE.FIRSTNAME, 'Mr./Mrs.') ||
  ' ' || PE.LASTNAME AS FULLNAME
FROM PERSONS PE
Example 2. Использование функции COALESCE с агрегатными функциями

В данном примере в случае получения при суммировании значения NULL запрос вернёт 0.

SELECT coalesce (sum (q), 0)
FROM bills
WHERE ...
См. также:

CASE.

DECODE()

Доступно в

DSQL, PSQL

Синтаксис
DECODE(<testexpr>,
  <expr1>, <result1>
  [<expr2>, <result2> …]
  [, <defaultresult>])

эквивалентная конструкция CASE

CASE <testexpr>
  WHEN <expr1> THEN <result1>
  [WHEN <expr2> THEN <result2> …]
  [ELSE <defaultresult>]
END
Table 1. Параметры функции DECODE
Параметр Описание

testexpr

Выражения любого совместимого типа, которое сравнивается с выражениями <expr1>, <expr2> …​ <exprN>

expr1, expr2, …​ exprN

Выражения любого совместимого типа, с которыми сравнивают с выражением <testexpr>.

result1, result2, …​ resultN

Возвращаемые выражения любого типа.

defaultresult

Выражение, возвращаемое если ни одно из условий не было выполнено.

Тип возвращаемого результата

зависит от типов входных аргументов

Данная функция эквивалентна конструкции Простой CASE, в которой заданное выражение сравнивается с другими выражениями до нахождения совпадения.Результатом является значение, указанное после выражения, с которым найдено совпадение.Если совпадений не найдено, то возвращается значение по умолчанию (если оно, конечно, задано — в противном случае возвращается NULL).

Caution

Совпадение эквивалентно оператору ‘=’, т.е.если testexpr имеет значение NULL, то он не соответствует ни одному из expr, даже тем, которые имеют значение NULL.

Примеры DECODE

Example 1. Использование функции DECODE
select name,
  age,
  decode(upper(sex),
         'M', 'Male',
         'F', 'Female',
         'Unknown'),
  religion
from people
См. также:

CASE.

IIF()

Доступно в

DSQL, PSQL

Синтаксис
IIF (<condition>, ResultT, ResultF)
Table 1. Параметры функции IIF
Параметр Описание

condition

Выражение логического типа.

resultT

Возвращаемое значение, если condition является истинным.

resultF

Возвращаемое значение, если condition является ложным.

Тип возвращаемого результата

зависит от типов входных аргументов

Функция IIF имеет три аргумента.Если первый аргумент является истиной, то результатом будет второй параметр, в противном случае результатом будет третий параметр.

Оператор IIF также можно сравнить в тройным оператором “?:” в C-подобных языках.

Note

По сути, функция IIF это короткая запись оператора CASE

CASE WHEN <condition> THEN resultT ELSE resultF END

Примеры IIF

Example 1. Использование функции IIF
SELECT IIF(SEX = 'M', 'Sir', 'Madam') FROM CUSTOMERS
См. также:

CASE.

MAXVALUE()

Доступно в

DSQL, PSQL

Синтаксис
MAXVALUE (<expr1> [, ... , <exprN> ])
Table 1. Параметры функции MAXVALUE
Параметр Описание

expr1 …​ exprN

Выражения любого совместимого типа.

Тип возвращаемого результата:

тот же что и первый аргумент функции expr1

Возвращает максимальное значение из входного списка чисел, строк или параметров с типом DATE/TIME/TIMESTAMP.

Note

Если один или более входных параметров имеют значение NULL, то результатом функции MAXVALUE тоже будет NULL в отличие от агрегатной функции MAX.

Примеры MAXVALUE

Example 1. Использование функции MAXVALUE
SELECT MAXVALUE(PRICE_1, PRICE_2) AS PRICE
FROM PRICELIST

MINVALUE()

Доступно в

DSQL, PSQL

Синтаксис
MINVALUE (<expr1> [, ... , <exprN> ])
Table 1. Параметры функции MINVALUE
Параметр Описание

expr1 …​ exprN

Выражения любого совместимого типа.

Тип возвращаемого результата

тот же что и первый аргумент функции expr1

Возвращает минимальное значение из входного списка чисел, строк или параметров с типом DATE/TIME/TIMESTAMP.

Note

Если один или более входных параметров имеют значение NULL, то результатом функции MINVALUE тоже будет NULL в отличие от агрегатной функции MIN.

Примеры MINVALUE

Example 1. Использование функции MINVALUE
SELECT MINVALUE(PRICE_1, PRICE_2) AS PRICE
FROM PRICELIST

NULLIF()

Доступно в

DSQL, PSQL

Синтаксис
NULLIF (<exp1>, <exp2>)
Table 1. Параметры функции NULLIF
Параметр Описание

expr1, expr2

Выражения любого совместимого типа.

Тип возвращаемого результата

зависит от типов входных аргументов

Функция возвращает значение первого аргумента, если он неравен второму.В случае равенства аргументов возвращается NULL.

Примеры NULLIF

Example 1. Использование функции NULLIF
SELECT AVG(NULLIF(weight, -1)) FROM cargo;

Этот запрос возвращает среднее значение поля weight по таблице,за исключением строк, где он не указан (равен -1).Если бы не было этой функции простой оператор avg(weight)вернул бы некорректное значение.

Другие функции

В этом разделе расположены функции, которые сложно отнести к какой-либо категории.

MAKE_DBKEY()

Доступно в

DSQL, PSQL

Синтаксис
MAKE_DBKEY (<relation>, recnum [, dpnum [, ppnum]]})

<relation> ::= rel_name | rel_id
Table 1. Параметры функции MAKE_DBKEY
Параметр Описание

rel_name

Имя таблицы.

rel_id

Идентификатор таблицы.Можно найти в RDB$RELATIONS.RDB$RELATION_ID.

recnum

Номер записи.Либо абсолютный (если dpnum и ppnum отсутствуют), либо относительный (если dpnum присутствует)

dpnum

Номер страницы данных DP.Либо абсолютный (если ppnum отсутствует), либо относительный (если ppnum присутствует)

ppnum

Номер страницы указателей на данные PP.

Функция MAKE_DBKEY создаёт значение DBKEY, используя имя или идентификатор таблицы, номер записи и, необязательно, логический номер страницы данных и страницы указателя.

Note
Замечания
  1. Если первый аргумент (таблица) является строковым выражением или литералом, то он обрабатывается как имя таблицы, и Firebird ищет соответствующий идентификатор таблицы. Поиск чувствителен к регистру.

    В случае строкового литерала идентификатор таблицы оценивается во время подготовки.В случае выражения, идентификатор таблицы оценивается во время выполнения.

    Если таблица не может быть найдена, возникает ошибка isc_relnotdef.

  2. Если первый аргумент (таблица) является числовым выражением или литералом, то он обрабатывается как идентификатор таблицы и используется «как есть», без проверки существования таблицы.

    Если значение аргумента отрицательно или превышает максимально допустимый идентификатор таблицы (в настоящее время 65535), то возвращается NULL.

  3. Второй аргумент (recnum) представляет собой абсолютный номер записи в отношении (если следующие аргументы — dpnum и ppnum — отсутствуют) или номер записи относительно первой записи, указанной в следующих аргументах.

  4. Третий аргумент (dpnum) — это логический номер страницы данных (DP) в таблице (если следующий аргумент — ppnum — отсутствует) или номер страницы данных относительно первой страницы данных, адресованной заданным ppnum.

  5. Четвёртый аргумент (ppnum) — это логический номер страницы указателя (PP) в таблице.

  6. Все числа начинаются с нуля. Максимально допустимое значение для dpnum и ppnum составляет 232 (4294967296).

    Если указан параметр dpnum, значение recnum может быть отрицательным.

    Если dpnum отсутствует и recnum отрицательно, возвращается NULL.

    Если указан ppnum, то dpnum может быть отрицательным.

    Если ppnum отсутствует и dpnum отрицателен, возвращается NULL.

  7. Если какой-либо из указанных аргументов имеет значение NULL, результат также равен NULL.

  8. Первый аргумент (таблица) описывается как INTEGER, но может быть переопределен приложением как VARCHAR или CHAR.

    recnum, dpnum и ppnum описываются как BIGINT (64-разрядное целое число со знаком).

Примеры:
  1. Запрос выбирает запись, используя имя таблицы (имя таблицы в верхнем регистре)

    select * from rdb$relations where rdb$db_key = make_dbkey('RDB$RELATIONS', 0)
  2. Запрос выбирает запись, используя идентификатор таблицы

    select * from rdb$relations where rdb$db_key = make_dbkey(6, 0)
  3. Запрос выбирает все записи, которые физически находятся на первой странице данных в таблице

    select * from rdb$relations
    where rdb$db_key >= make_dbkey(6, 0, 0)
      and rdb$db_key <  make_dbkey(6, 0, 1)
  4. Запрос выбирает все записи, которые физически находятся на первой странице данных 6-й страницы указателя в таблице

    select * from SOMETABLE
    where rdb$db_key >= make_dbkey('SOMETABLE', 0, 0, 5)
      and rdb$db_key <  make_dbkey('SOMETABLE', 0, 1, 5)

См. также: [fblangref-appx-supp-rdb-dbkey].

RDB$ERROR()

Доступно в

PSQL

Синтаксис
RDB$ERROR (<context>)

<context> ::= GDSCODE | SQLCODE | SQLSTATE | EXCEPTION | MESSAGE
Тип возвращаемого результата

Зависит от контекста

Возвращает значение контекста активного исключения.Тип возвращаемого значения зависит от контекста.

Note

Функция RDB$ERROR всегда возвращает NULL вне блока обработки ошибок WHEN …​ DO.

Доступные контексты в качестве аргумента функции RDB$ERROR:

EXCEPTION

функция возвращает имя исключения, если активно исключение определённое пользователем, или NULL если активно одно из системных исключений.Для контекста EXCEPTION тип возвращаемого значения: VARCHAR(63) CHARACTER SET UTF8.

MESSAGE

функция возвращает интерпретированный текст активного исключения.Для контекста MESSAGE тип возвращаемого значения: VARCHAR(1024) CHARACTER SET UTF8.

GDSCODE

функция возвращает значение контекстной переменной GDSCODE.

SQLCODE

функция возвращает значение контекстной переменной SQLCODE.

SQLSTATE

функция возвращает значение контекстной переменной SQLSTATE.

Example 1. Использование функции RDB$ERROR для сохранения текста ошибки в журнал
...
BEGIN
...
WHEN ANY DO
  EXECUTE PROCEDURE P_LOG_EXCEPTION(RDB$ERROR(MESSAGE));
END
...

RDB$GET_TRANSACTION_CN()

Доступно в

DSQL, PSQL

Синтаксис
RDB$GET_TRANSACTION_CN (transaction_id)
Table 1. Параметры функции RDB$GET_TRANSACTION_CN
Параметр Описание

transaction_id

Номер (идентификатор) транзакции

Тип возвращаемого результата:

BIGINT

Возвращает номер подтверждения (Commit Number) для заданной транзакции.

Note

Внутренние механизмы Firebird используют беззнаковое 8-байтное целое для Commit Number и беззнаковое 6-байтное целое для номера транзакции.Поэтому, несмотря на то, что язык SQL не имеет без знаковых целых, а RDB$GET_TRANSACTION_CN возвращает знаковый BIGINT, невозможно увидеть отрицательный номер подтверждения, за исключением нескольких специальных значений, используемых для неподтверждённых транзакций.

Если функция RDB$GET_TRANSACTION_CN возвращает значение больше 1, то это фактический (Commit Number) транзакции,то есть эта транзакция была зафиксирована после запуска базы данных.

В остальных случая функция может возвращать одно из следующих результатов, указывающих статус фиксации транзакции:

-2

мёртвые транзакции (отмененные);

-1

зависшие транзакции (в состоянии limbo 2PC транзакций);

 0

активные транзакции;

 1

для транзакций подтверждённых до старта базы данных или с номером меньше чем OIT (Oldest Interesting Transaction);

NULL

если номер транзакции равен NULL или больше чем Next Transaction.

Example 1. Использование RDB$GET_TRANSACTION_CN
select rdb$get_transaction_cn(current_transaction) from rdb$database;

select rdb$get_transaction_cn(123) from rdb$database;
Note

За более детальной информацией о Commit Number, обратитесь к Firebird 4.0 Release Notes.

RDB$ROLE_IN_USE()

Доступно в

DSQL, PSQL

Синтаксис
RDB$ROLE_IN_USE (role_name)
Table 1. Параметры функции RDB$ROLE_IN_USE
Параметр Описание

role_name

Имя роли использование которой проверяется

Тип возвращаемого результата

BOOLEAN

Функция RDB$ROLE_IN_USE возвращает используется ли роль текущим пользователем.

Note

Данная функция позволяет проверить использование любой роли: указанной явно (при входе в систему или изменённой с помощью оператора SET ROLE) и назначенной неявно (роли назначенные пользователю с использованием предложения DEFAULT).

Example 1. Использование функции RDB$ROLE_IN_USE
-- Проверяем используется ли явно назначенная или
-- неявно полученная роль MANAGER
IF (RDB$ROLE_IN_USE('MANAGER')) THEN
BEGIN
  ...
END
Example 2. Список ролей используемых текущим подключением
SELECT * FROM RDB$ROLES WHERE RDB$ROLE_IN_USE(RDB$ROLE_NAME)
См. также:

GRANT ROLE, SET ROLE, CURRENT_ROLE.

RDB$SYSTEM_PRIVILEGE()

Доступно в

DSQL, PSQL

Синтаксис
RDB$SYSTEM_PRIVILEGE (<privilege>)
Table 1. Параметры функции RDB$SYSTEM_PRIVILEGE
Параметр Описание

privilege

Проверяемая системная привилегия

Тип возвращаемого результата

BOOLEAN

Функция RDB$SYSTEM_PRIVILEGE используется системная привилегия текущим соединением.Список системных привилегий см.в CREATE ROLE.

Example 1. Использование функции RDB$SYSTEM_PRIVILEGE
SELECT RDB$SYSTEM_PRIVILEGE(USER_MANAGEMENT) FROM RDB$DATABASE;
См. также:

CREATE ROLE.

Математические функции

ABS()

Доступно в

DSQL, PSQL

Синтаксис
ABS (number)
Table 1. Параметры функции ABS
Параметр Описание

number

Выражение числового типа

Тип возвращаемого результата:

тот же что и входной аргумент.

Функция ABS возвращает абсолютное значение (модуль) аргумента.

COS()

Доступно в

DSQL, PSQL

Синтаксис
COS (angle)
Table 1. Параметры функции COS
Параметр Описание

angle

Угол, выраженный в радианах.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция COS возвращает косинус угла.Аргумент должен быть задан в радианах.

Любой NOT NULL результат находится в диапазоне [-1, 1].

См. также:

[fblangref-scalarfuncs-acos].

COSH()

Доступно в

DSQL, PSQL

Синтаксис
COSH (number)
Table 1. Параметры функции COSH
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция COSH возвращает гиперболический косинус аргумента.

Любой NOT NULL результат находится в диапазоне [1, +∞].

См. также:

[fblangref-scalarfuncs-acosh].

COT()

Доступно в

DSQL, PSQL

Синтаксис
COT (angle)
Table 1. Параметры функции COT
Параметр Описание

angle

Угол, выраженный в радианах.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция COT возвращает котангенс угла.Аргумент должен быть задан в радианах.

См. также:

[fblangref-scalarfuncs-tan].

EXP()

Доступно в

DSQL, PSQL

Синтаксис
EXP (number)
Table 1. Параметры функции EXP
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция EXP возвращает значение натуральной экспоненты, enumber

См. также:

[fblangref-scalarfuncs-ln].

FLOOR()

Доступно в

DSQL, PSQL

Синтаксис
FLOOR (number)
Table 1. Параметры функции FLOOR
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

BIGINT, INT128, DECFLOAT или DOUBLE PRECISION в зависимости от типа аргумента.

Функция FLOOR возвращает целое число, меньшее или равное аргументу.

LN()

Доступно в

DSQL, PSQL

Синтаксис
LN (number)
Table 1. Параметры функции LN
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция LN возвращает натуральный логарифм аргумента.

Note

В случае если передан отрицательный или нулевой аргумент функция вернёт ошибку.

См. также:

[fblangref-scalarfuncs-exp].

LOG()

Доступно в

DSQL, PSQL

Синтаксис
LOG (x, y)
Table 1. Параметры функции LOG
Параметр Описание

x

Основание.Выражение числового типа.

y

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция LOG возвращает логарифм y (второй аргумент) по основанию x (первый аргумент).

Особенности использования:

  • Если один из аргументов меньше или равен 0, то возникает ошибка;

  • Если оба аргумента равны 1, то результатом функции будет NaN (Not-a-Number — не число);

  • Если x = 1 и y < 1, то результатом функции будет -INF (-∞);

  • Если x = 1 и y > 1, то результатом функции будет `INF` (∞).

LOG10()

Доступно в

DSQL, PSQL

Синтаксис
LOG10 (number)
Table 1. Параметры функции LOG10
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция LOG10 возвращает десятичный логарифм аргумента.

Note

Если входной аргумент отрицательный или равен 0, возникает ошибка.

MOD()

Доступно в

DSQL, PSQL

Синтаксис
MOD (a, b)
Table 1. Параметры функции MOD
Параметр Описание

a

Выражение числового типа.

b

Выражение числового типа.

Тип возвращаемого результата:

INTEGER, BIGINT или INT128 в зависимости от типов аргументов.

Функция MOD возвращает остаток от целочисленного деления.

Note

Вещественные числа округляются до выполнения деления.Например, результатом “mod(7.5, 2.5)” будет 2 (“mod(8, 3)”), а не 0.

PI()

Доступно в

DSQL, PSQL

Синтаксис
PI ()
Тип возвращаемого результата:

DOUBLE PRECISION

Функция PI возвращает число π.

ACOS()

Доступно в

DSQL, PSQL

Синтаксис
ACOS (number)
Table 1. Параметры функции ACOS
Параметр Описание

number

Выражение числового типа в диапазоне [-1; 1].

Тип возвращаемого результата:

DOUBLE PRECISION

Функция ACOS возвращает арккосинус (в радианах) аргумента.

В случае если аргумент функции вне границы диапазона [-1, 1], то функция вернёт неопределённое значения NaN.

См. также:

[fblangref-scalarfuncs-cos].

POWER()

Доступно в

DSQL, PSQL

Синтаксис
POWER (x, y)
Table 1. Параметры функции POWER
Параметр Описание

x

Выражение числового типа.

y

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция POWER возвращает результат возведения числа x в степень y то есть (xy).

Note

Если x меньше нуля, возникает ошибка.

RAND()

Доступно в

DSQL, PSQL

Синтаксис
RAND ()
Тип возвращаемого результата:

DOUBLE PRECISION

Функция RAND возвращает псевдослучайное число в интервале от 0 до 1.

ROUND()

Доступно в

DSQL, PSQL

Синтаксис
ROUND (number [, scale])
Table 1. Параметры функции ROUND
Параметр Описание

number

Выражение числового типа.

scale

Масштаб — целое число, определяющее число десятичных разрядов, к которым должен быть проведено округление, т.е.

  •  2 для округления к самому близкому кратному 0.01 числу

  •  1 для округления к самому близкому кратному 0.1 числу

  •  0 для округления к самому близкому целому числу

  • -1 для округления к самому близкому кратному 10 числу

  • -2 для округления к самому близкому кратному 100 числу

По умолчанию 0.

Тип возвращаемого результата

масштабируемое целое (INTEGER, BIGINT или INT128) или DECFLOAT, или DOUBLE PRECISION в зависимости от типа number.

Функция ROUND округляет число до ближайшего целого числа.Если дробная часть равна 0.5, то округление до ближайшего большего целого числа для положительных чисел и до ближайшего меньшего для отрицательных чисел.С дополнительным опциональным параметром scale число может быть округлено до одной из степеней числа 10 (десятки, сотни, десятые части, сотые части и т.д.) вместо просто целого числа.

Note

Если используется параметр scale, то результат имеет такой же масштаб, как и первый параметр number.

Примеры ROUND

Example 1. Использование функции ROUND
ROUND(123.654, 1) -- Результат: 123.700 (а не 123.7)
ROUND(8341.7, -3) -- Результат: 8000.0 (а не 8000)
ROUND(45.1212, 0) -- Результат: 45.0000 (а не 45)
ROUND(45.1212)    -- Результат: 45
См. также:

[fblangref-scalarfuncs-trunc].

SIGN()

Доступно в

DSQL, PSQL

Синтаксис
SIGN (number)
Table 1. Параметры функции SIGN
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

SMALLINT

Функция SIGN возвращает знак входного параметра.

  • -1 — число меньше нуля

  •  0 — число равно нулю

  •  1 — число больше нуля

SIN()

Доступно в

DSQL, PSQL

Синтаксис
SIN (angle)
Table 1. Параметры функции SIN
Параметр Описание

angle

Угол, выраженный в радианах.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция SIN возвращает синус угла.Аргумент должен быть задан в радианах.

Любой NOT NULL результат находится в диапазоне [-1, 1].

См. также:

[fblangref-scalarfuncs-asin].

SINH()

Доступно в

DSQL, PSQL

Синтаксис
SINH (number)
Table 1. Параметры функции SINH
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция SINH возвращает гиперболический синус аргумента.

См. также:

[fblangref-scalarfuncs-asinh].

SQRT()

Доступно в

DSQL, PSQL

Синтаксис
SQRT (number)
Table 1. Параметры функции SQRT
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция SQRT возвращает квадратный корень аргумента.

TAN()

Доступно в

DSQL, PSQL

Синтаксис
TAN (angle)
Table 1. Параметры функции TAN
Параметр Описание

angle

Угол, выраженный в радианах.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция TAN возвращает тангенс угла.Аргумент должен быть задан в радианах.

TANH()

Доступно в

DSQL, PSQL

Синтаксис
TANH (number)
Table 1. Параметры функции TANH
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция TANH возвращает гиперболический тангенс аргумента.

Любой NOT NULL результат находится в диапазоне [-1, 1].

См. также:

[fblangref-scalarfuncs-atanh].

TRUNC()

Доступно в

DSQL, PSQL

Синтаксис
TRUNC (number [, scale])
Table 1. Параметры функции TRUNC
Параметр Описание

number

Выражение числового типа.

scale

Масштаб — целое число, определяющее число десятичных разрядов, к которым должен быть проведено усечение, т.е.

  •  2 для усечения к самому близкому кратному 0.01 числу

  •  1 для усечения к самому близкому кратному 0.1 числу

  •  0 для усечения к самому близкому целому числу

  • -1 для усечения к самому близкому кратному 10 числу

  • -2 для усечения к самому близкому кратному 100 числу

По умолчанию 0.

Тип возвращаемого результата

масштабируемое целое (INTEGER, BIGINT или INT128) или DECFLOAT, или DOUBLE PRECISION в зависимости от типа number.

Функция TRUNC усекает число до ближайшего целого числа.С дополнительным опциональным параметром scale число может быть усечено до одной из степеней числа 10 (десятки, сотни, десятые части, сотые части и т.д.) вместо просто целого числа.

Note

Если используется параметр scale, то результат имеет такой же масштаб, как и первый параметр number.

Important

Функция всегда увеличивает отрицательные числа, поскольку она обрезает дробную часть.

Example 1. Использование функции TRUNC
TRUNC(789.2225, 2)  -- Результат: 789.2200 (а не 789.22)
TRUNC(345.4, -2) 	-- Результат: 300.0 (а не 300)
TRUNC(-163.41, 0)	-- Результат: -163.00 (а не -163)
TRUNC(-163.41)      -- Результат: -163

ACOSH()

Доступно в

DSQL, PSQL

Синтаксис
ACOSH (number)
Table 1. Параметры функции ACOSH
Параметр Описание

number

Выражение числового типа в диапазоне [1; +∞].

Тип возвращаемого результата:

DOUBLE PRECISION

Функция ACOSH возвращает гиперболический арккосинус (в радианах) аргумента.

См. также:

[fblangref-scalarfuncs-cosh].

ASIN()

Доступно в

DSQL, PSQL

Синтаксис
ASIN (number)
Table 1. Параметры функции ASIN
Параметр Описание

number

Выражение числового типа в диапазоне [-1; 1].

Тип возвращаемого результата:

DOUBLE PRECISION

Функция ASIN возвращает арксинус (в радианах) аргумента.

В случае если аргумент функции вне границы диапазона [-1, 1], то функция вернёт неопределённое значения NaN.

См. также:

[fblangref-scalarfuncs-sin].

ASINH()

Доступно в

DSQL, PSQL

Синтаксис
ASIN (number)
Table 1. Параметры функции ASINH
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция ASINH возвращает гиперболический арксинус (в радианах) аргумента.

См. также:

[fblangref-scalarfuncs-sinh].

ATAN()

Доступно в

DSQL, PSQL

Синтаксис
ATAN (number)
Table 1. Параметры функции ATAN
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция ATAN возвращает арктангенс аргумента.

Функция возвращает угол в радианах в диапазоне [-π/2; π/2].

ATAN2()

Доступно в

DSQL, PSQL

Синтаксис
ATAN2 (y, x)
Table 1. Параметры функции ATAN2
Параметр Описание

y

Выражение числового типа.

x

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция ATAN2 возвращает угол как отношение синуса к косинусу, аргументы, у которых задаются этими двумя параметрами, а знаки синуса и косинуса соответствуют знакам параметров.Это позволяет получать результаты по всей окружности, включая углы -π/2 и π/2.

Особенности использования:

  • Результат — угол в диапазоне [-π, π] радиан;

  • Если х отрицательный, то при нулевом значении y результат равен π, а при значении 0 равен -π;

  • Если и y и x равны 0, то результат бессмыслен.

Note
  • Полностью эквивалентное описание этой функции следующее: ATAN2 (y, x) является углом между положительной осью X и линией от начала координат до точки (x, y). Это также делает очевидным, что значение ATAN2 (0, 0) не определено;

  • Если x больше, чем 0, ATAN2 (y, x) совпадает с ATAN (y/x);

  • Если известны и синус, и косинус угла, то ATAN2 (sin, cos) возвращает угол.

ATANH()

Доступно в

DSQL, PSQL

Синтаксис
ATANH (number)
Table 1. Параметры функции ATANH
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

DOUBLE PRECISION

Функция ATANH возвращает гиперболический арктангенс (в радианах) аргумента.

См. также:

[fblangref-scalarfuncs-tanh].

CEIL(), CEILING()

Доступно в

DSQL, PSQL

Синтаксис
CEIL[ING] (number)
Table 1. Параметры функции CEIL[ING]
Параметр Описание

number

Выражение числового типа.

Тип возвращаемого результата:

BIGINT, INT128, DECFLOAT или DOUBLE PRECISION в зависимости от типа аргумента.

Функция CEIL возвращает наименьшее целое число, большее или равное аргументу.

Функции для работы со строками

ASCII_CHAR()

Доступно в

DSQL, PSQL

Синтаксис
ASCII_CHAR (code)
Table 1. Параметры функции ASCII_CHAR
Параметр Описание

code

Целое число в диапазоне от 0 до 255.

Тип возвращаемого результата:

CHAR(1) CHARACTER SET NONE.

Функция ASCII_CHAR возвращает ASCII символ соответствующий номеру, переданному в качестве аргумента.

LEFT()

Доступно в

DSQL, PSQL

Синтаксис
LEFT (string, length)
Table 1. Параметры функции LEFT
Параметр Описание

string

Выражение строкового типа.

length

Целое число.Определяет количество возвращаемых символов.

Тип возвращаемого результата:

VARCHAR или BLOB.

Функция LEFT возвращает левую часть строки, количество возвращаемых символов определяется вторым параметром.

Особенности использования:

  • Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;

  • Если строковый аргумент BLOB, результатом будет BLOB, в противном случае результатом будет VARCHAR(N), при этом N – будет равно длине строкового параметра;

  • Если числовой параметр превысит длину текста, результатом будет исходный текст.

Warning

При использовании BLOB в параметрах функции может потребоваться загрузить объект полностью в память.При больших объёмах BLOB могут наблюдаться потери производительности.

Example 1. Использование функции LEFT
SELECT LEFT('ABC', 2) FROM rdb$database;
-- результат AB

LOWER()

Доступно в

DSQL, PSQL, ESQL

Синтаксис
LOWER (string)
Table 1. Параметры функции LOWER
Параметр Описание

string

Выражение строкового типа.

Тип возвращаемого результата:

VAR[CHAR] или BLOB

Функция LOWER возвращает входную строку в нижнем регистре.Точный результат зависит от набора символов входной строки.Например, для наборов символов NONE и ASCII только ASCII символы переводятся в нижний регистр; для OCTETS — вся входная строка возвращается без изменений.

Примеры LOWER

Example 1. Использование функции LOWER

select Sherifffrom Townswhere lower(Name) = 'cooper''s valley'


См. также:

[fblangref-scalarfuncs-upper].

LPAD()

Доступно в

DSQL, PSQL

Синтаксис
LPAD (str, endlen [, padstr])
Table 1. Параметры функции LPAD
Параметр Описание

str

Выражение строкового типа.

endlen

Длина выходной строки.

padstr

Строка, которой дополняется исходная строка до указанной длины.По умолчанию является пробелом (“' '”).

Тип возвращаемого результата:

VARCHAR или BLOB.

Функция LPAD дополняет слева входную строку пробелами или определённой пользователем строкой до заданной длины.

Особенности использования:

  • Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;

  • Если входная строка имеет тип BLOB, то результат также будет BLOB, в противном случае результат будет VARCHAR(endlen).

  • Если аргумент padstr задан, но равен '' (пустой строке), то дополнения строки не происходит! В случае если endlen меньше длины входной строки, то в результате происходит её усечение до длины endlen, даже если параметр padstr равен пустой строке.

Warning

При использовании BLOB в параметрах функции может потребоваться загрузить объект полностью в память.При больших объёмах BLOB могут наблюдаться потери производительности.

Примеры LPAD

Example 1. Использование функции LPAD
LPAD ('Hello', 12)                -- возвращает '       Hello'
LPAD ('Hello', 12, '-')           -- возвращает '-------Hello'
LPAD ('Hello', 12, '')            -- возвращает 'Hello'
LPAD ('Hello', 12, 'abc')         -- возвращает 'abcabcaHello'
LPAD ('Hello', 12, 'abcdefghij')  -- возвращает 'abcdefgHello'
LPAD ('Hello', 2)                 -- возвращает 'He'
LPAD ('Hello', 2, '-')            -- возвращает 'He'
LPAD ('Hello', 2, '')             -- возвращает 'He'
См. также:

[fblangref-scalarfuncs-rpad].

OCTET_LENGTH()

Доступно в

DSQL, PSQL

Синтаксис
OCTET_LENGTH (string)
Table 1. Параметры функции OCTET_LENGTH
Параметр Описание

string

Выражение строкового типа.

Тип возвращаемого результата:

BIGINT

Функция OCTET_LENGTH возвращает количество байт занимаемое строкой.

При работе с параметрами типа CHAR функция возвращает значение всей формальной строковой длины.Для того чтобы узнать “логическую” длину строки в байтах, то перед передачей аргумента функции следует применить RIGHT TRIM.

Note

Следует помнить, что не во всех наборах символов количество байт занимаемых строкой равно количеству символов.

Примеры OCTET_LENGTH

Example 1. Использование функции OCTET_LENGTH
SELECT OCTET_LENGTH('Hello!')
FROM rdb$database
-- возвратит 6

SELECT OCTET_LENGTH(_iso8859_1 'Grüß di!')
FROM rdb$database
-- возвратит 8: ü и ß занимают не более 1 байта в ISO8859_1

SELECT
  OCTET_LENGTH(CAST(_iso8859_1 'Grüß di!' AS VARCHAR(24) CHARACTER SET utf8))
FROM rdb$database
-- возвратит 10: ü и ß занимают 2 байта в UTF8

SELECT
  OCTET_LENGTH(CAST(_iso8859_1 'Grüß di!' AS CHAR(24) CHARACTER SET utf8))
FROM rdb$database
-- возвратит 26: всего 24 CHAR позиции, и две из них занимают 2 байта

OVERLAY()

Доступно в

DSQL, PSQL

Синтаксис
OVERLAY (string PLACING replacement FROM pos [FOR length])
Table 1. Параметры функции OVERLAY
Параметр Описание

string

Строка, в которой происходит замена.

replacement

Строка, которой заменяется.

pos

Позиция, с которой происходит замена.

length

Количество символов, которые будут удалены из исходной строки.

Тип возвращаемого результата:

VARCHAR или BLOB

Функция OVERLAY предназначена для замены части строки другой строкой.

По умолчанию число удаляемых из строки символов равняется длине заменяемой строки.Дополнительный четвёртый параметр позволяет пользователю задать своё число символов, которые будут удалены.

Особенности использования:

  • Функция полностью поддерживает тестовые BLOB с любым набором символов и любой длины;

  • Если входная строка имеет тип BLOB, то и результат будет иметь тип BLOB. В противном случае тип результата будет VARCHAR(n), где n является суммой длин параметров string и replacement;

  • Как и во всех строковых функциях SQL параметр pos является определяющим;

  • Если pos больше длины строки, то replacement помещается сразу после окончания строки;

  • Если число символов от pos до конца строки меньше, чем длина replacement (или, чем параметр length, если он задан), то строка усекается до значения pos и replacement помещается после него;

  • При нулевом параметре length (FOR 0) replacement просто вставляется в строку, начиная с позиции pos;

  • Если любой из параметров имеет значение NULL, то и результат будет NULL;

  • Если параметры pos и length не являются целым числом, то используется банковское округление (до чётного): 0.5 становится 0, 1.5 становится 2, 2.5 становится 2, 3.5 становится 4 и т.д.

Warning

При использовании BLOB функции может потребоваться загрузить весь объект в память.При больших размерах BLOB это может повлиять на производительность.

Примеры OVERLAY

Example 1. Использование функции OVERLAY
OVERLAY ('Goodbye' PLACING 'Hello' FROM 2) -- Результат: 'Ghelloe'
OVERLAY ('Goodbye' PLACING 'Hello' FROM 5) -- Результат: 'GoodHello'
OVERLAY ('Goodbye' PLACING 'Hello' FROM 8) -- Результат: 'GoodbyeHello'
OVERLAY ('Goodbye' PLACING 'Hello' FROM 20) -- Результат: 'GoodbyeHello'
OVERLAY ('Goodbye' PLACING 'Hello' FROM 2 FOR 0) -– Результат: 'GHellooodbye'
OVERLAY ('Goodbye' PLACING 'Hello' FROM 2 FOR 3) -- Результат: 'GHellobye'
OVERLAY ('Goodbye' PLACING 'Hello' FROM 2 FOR 6) -- Результат: 'GHello'
OVERLAY ('Goodbye' PLACING 'Hello' FROM 2 FOR 9) -- Результат: 'Ghello'
OVERLAY ('Goodbye' PLACING '' FROM 4) -- Результат: 'Goodbye'
OVERLAY ('Goodbye' PLACING '' FROM 4 FOR 3) -- Результат: 'Gooe'
OVERLAY ('Goodbye' PLACING '' FROM 4 FOR 20) -- Результат: 'Goo'
OVERLAY ('' PLACING 'Hello' FROM 4) -- Результат: 'Hello'
OVERLAY ('' PLACING 'Hello' FROM 4 FOR 0) -- Результат: 'Hello'
OVERLAY ('' PLACING 'Hello' FROM 4 FOR 20) -- Результат: 'Hello'

POSITION()

Доступно в

DSQL, PSQL

Синтаксис
  POSITION (substr IN string)
| POSITION (substr, string [, startpos])
Table 1. Параметры функции POSITION
Параметр Описание

substr

Подстрока, позиция которой ищется.

string

Строка, в которой ищется позиция.

startpos

Позиция, с которой начинается поиск подстроки.

Тип возвращаемого результата:

INTEGER

Функция POSITION возвращает позицию первого вхождения подстроки в строку.Отсчёт начинается с 1.Третий аргумент (опциональный) задаёт позицию в строке, с которой начинается поиск подстроки, тем самым игнорирую любые вхождения подстроки в строку до этой позиции.Если совпадение не найдено, функция возвращает 0.

Особенности использования:

  • Опциональный третий параметр поддерживается только вторым вариантом синтаксиса (синтаксис с запятой);

  • Пустую строку, функция считает подстрокой любой строки. Поэтому при входном параметре substr, равном '' (пустая строка), и при параметре string, отличном от NULL, результатом будет:

    • 1, если параметр startpos не задан;

    • startpos, если startpos не превышает длину параметра string;

    • 0, если startpos больше длины параметра string.

Примеры POSITION

Example 1. Использование функции POSITION
POSITION ('be' IN 'To be or not to be')   -- Результат: 4
POSITION ('be', 'To be or not to be')     -- Результат: 4
POSITION ('be', 'To be or not to be', 4)  -- Результат: 4
POSITION ('be', 'To be or not to be', 8)  -- Результат: 17
POSITION ('be', 'To be or not to be', 18) -- Результат: 0
POSITION ('be' in 'Alas, poor Yorick!') -- Результат: 0

REPLACE()

Доступно в

DSQL, PSQL

Синтаксис
REPLACE (str, find, repl)
Table 1. Параметры функции REPLACE
Параметр Описание

str

Строка, в которой делается замена.

find

Строка, которая ищется.

repl

Строка, на которую происходит замена.

Тип возвращаемого результата:

VARCHAR или BLOB

Функция REPLACE заменяет в строке все вхождения одной строки на другую строку.

Особенности использования:

  • Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;

  • Если один из аргументов имеет тип BLOB, то результат будет иметь тип BLOB. В противном случае результат будет иметь тип VARCHAR(N), где N рассчитывается из длин str, find и repl таким образом, что даже максимальное количество замен не будет вызывать переполнения поля.

  • Если параметр find является пустой строкой, то возвращается str без изменений;

  • Если параметр repl является пустой строкой, то все вхождения find удаляются из строки str;

  • Если любой из аргументов равен NULL, то результатом всегда будет NULL, даже если не было произведено ни одной замены.

Warning

При использовании BLOB в параметрах функции может потребоваться загрузить объект полностью в память.При больших объёмах BLOB могут наблюдаться потери производительности.

Примеры REPLACE

Example 1. Использование функции REPLACE
REPLACE ('Billy Wilder', 'il', 'oog')  -- возвращает 'Boogly Woogder'
REPLACE ('Billy Wilder', 'il', '')     -- возвращает 'Bly Wder'
REPLACE ('Billy Wilder', null, 'oog')  -- возвращает NULL
REPLACE ('Billy Wilder', 'il', null)   -- возвращает NULL
REPLACE ('Billy Wilder', 'xyz', null)  -- возвращает NULL (!)
REPLACE ('Billy Wilder', 'xyz', 'abc') -- возвращает 'Billy Wilder'
REPLACE ('Billy Wilder', '', 'abc')    -- возвращает 'Billy Wilder'
См. также:

[fblangref-scalarfuncs-overlay].

REVERSE()

Доступно в

DSQL, PSQL

Синтаксис
REVERSE (string)
Table 1. Параметры функции REVERSE
Параметр Описание

string

Выражение строкового типа.

Тип возвращаемого результата:

VARCHAR

Функция REVERSE возвратит строку перевёрнутую "задом наперёд".

Примеры REVERSE

Example 1. Использование функции REVERSE
REVERSE ('spoonful')             -- возвращает 'lufnoops'
REVERSE ('Was it a cat I saw?')  -- возвращает '?was I tac a ti saW'
Tip

Данная функция очень удобна, если вам предстоит обработать (сортировать или группировать) информацию, которая находится в конце строки.Пример такой информации – доменные имена или имена адресов электронной почты.

CREATE INDEX ix_people_email ON people
COMPUTED BY (reverse(email));

SELECT * FROM people
WHERE REVERSE(email) STARTING WITH reverse('.br');

RIGHT()

Доступно в

DSQL, PSQL

Синтаксис
RIGHT (string, length)
Table 1. Параметры функции RIGHT
Параметр Описание

string

Выражение строкового типа.

length

Целое число.Определяет количество возвращаемых символов.

Тип возвращаемого результата:

VARCHAR или BLOB

Функция RIGHT возвращает конечную (правую) часть входной строки.Длина возвращаемой подстроки определяется вторым параметром.

Особенности использования:

  • Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;

  • Если строковый аргумент BLOB, результатом будет BLOB, в противном случае результатом будет VARCHAR(N), при этом N — будет равно длине строкового параметра;

  • Если числовой параметр превысит длину текста, результатом будет исходный текст.

Warning

При использовании BLOB в параметрах функции может потребоваться загрузить объект полностью в память.При больших объёмах BLOB могут наблюдаться потери производительности.

Example 1. Использование функции RIGHT
SELECT RIGHT('ABC', 1) FROM rdb$database;
-- результат C

RPAD()

Доступно в

DSQL, PSQL

Синтаксис
RPAD (str, endlen [, padstr])
Table 1. Параметры функции RPAD
Параметр Описание

str

Выражение строкового типа.

endlen

Длина выходной строки.

padstr

Строка, которой дополняется исходная строка до указанной длины.По умолчанию является пробелом (' ').

Тип возвращаемого результата:

VARCHAR или BLOB

Функция RPAD дополняет справа входную строку пробелами или определённой пользователем строкой до заданной длины.

Особенности использования:

  • Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;

  • Если входная строка имеет тип BLOB, то результат также будет BLOB, в противном случае результат будет VARCHAR(endlen).

  • Если аргумент padstr задан, но равен '' (пустой строке), то дополнения строки не происходит! В случае если endlen меньше длины входной строки, то в результате происходит её усечение до длины endlen, даже если параметр padstr равен пустой строке.

Warning

При использовании BLOB в параметрах функции может потребоваться загрузить объект полностью в память.При больших объёмах BLOB могут наблюдаться потери производительности.

Примеры RPAD

Example 1. Использование функции RPAD
RPAD ('Hello', 12)                -- возвращает 'Hello       '
RPAD ('Hello', 12, '-')           -- возвращает 'Hello-------'
RPAD ('Hello', 12, '')            -- возвращает 'Hello'
RPAD ('Hello', 12, 'abc')         -- возвращает 'Helloabcabca'
RPAD ('Hello', 12, 'abcdefghij')  -- возвращает 'Helloabcdefg'
RPAD ('Hello', 2)                 -- возвращает 'He'
RPAD ('Hello', 2, '-')            -- возвращает 'He'
RPAD ('Hello', 2, '')             -- возвращает 'He'
См. также:

[fblangref-scalarfuncs-lpad].

ASCII_VAL()

Доступно в

DSQL, PSQL

Синтаксис
ASCII_VAL (ch)
Table 1. Параметры функции ASCII_VAL
Параметр Описание

ch

Строка типа данных [VAR]CHAR или текстовый BLOB максимального размера 32767 байт.

Тип возвращаемого результата:

SMALLINT

Функция ASCII_VAL возвращает ASCII код символа, переданного в качестве аргумента.

Особенности использования:

  • Если строка содержит более одного символа, то возвращается код первого символа строки;

  • Если строка пустая, возвращается ноль;

  • Если аргумент NULL, то возвращаемое значение также NULL.

SUBSTRING()

Доступно в

DSQL, PSQL

Синтаксис
SUBSTRING (<substring-args>)

<substring-args> ::=
    str FROM startpos [FOR length]
  | str SIMILAR <similar_pattern> ESCAPE <escape>

<similar-pattern> ::=
  <similar-pattern-R1>
  <escape>"<similar pattern_R2><escape>"
  <similar pattern-R3>
Table 1. Параметры функции SUBSTRING
Параметр Описание

str

Выражение строкового типа.

startpos

Позиция, с которой начинается извлечение подстроки.Целочисленное выражение.

length

Длина возвращаемой подстроки.Целочисленное выражение.

similar-pattern

Шаблон регулярного выражения SQL, по которому ищется подстрока.

escape

Символ экранирования.

Тип возвращаемого результата:

VARCHAR или BLOB

Функция SUBSTRING возвращает подстроку из строки, начиная с заданной позиции до конца строки или до указанной длины, либо извлекает подстроку с использованием шаблона регулярного выражения SQL.

Если любой из входных параметров имеет значение NULL, то и результат тоже будет иметь значение NULL.

Warning

При использовании BLOB в параметрах функции может потребоваться загрузить объект в память полностью.При больших объёмах BLOB могут наблюдаться потери производительности.

Позиционный SUBSTRING

В простой позиционной форме (с FROM) эта функция возвращает подстроку, начинающуюся с позиции символа startpos (позиция первого сивола равна 1). Без аргумента FOR он возвращает все оставшиеся символы в строке.С использованием FOR возвращается length символов или остаток строки, в зависимости от того что короче.

Начиная с Firebird 4.0, startpos может быть меньше 1.Когда startpos меньше 1, подстрока ведет себя так, как если бы строка имела дополнительные позиции 1 - startpos передфактическим первым символом в позиции 1.Значение length считается от этого воображаемого начала строки, поэтому результирующая строка может быть короче указанной length или даже пустой.

Функция полностью поддерживает двоичные и текстовые BLOB любой длины и с любым набором символов.Если параметр str имеет тип BLOB, то и результат будет иметь тип BLOB.Для любых других типов результатом будет тип VARCHAR.

Для входного параметра str, не являющегося BLOB, длина результата функции всегда будет равна длине строки str, независимо от значений параметров startpos и length.

Example 1. Использование функции SUBSTRING
select substring('abcdef' from 1 for 2) from rdb$database;
-- результат: 'ab'

select substring('abcdef' from 2) from rdb$database;
-- результат: 'bcdef'

select substring('abcdef' from 0 for 2) from rdb$database;
-- результат: 'a'
-- не 'ab', потому что в позиции 0 нет "ничего"

select substring('abcdef' from -5 for 2) from rdb$database;
-- результат: ''
-- длина заканчивается до фактического начала строки

SUBSTRING по регулярному выражению

Функция SUBSTRING с регулярным выражением (с SIMILAR) возвращает часть строки соответствующей шаблону регулярного выражения SQL.Если соответствия не найдено, то возвращается NULL.

Шаблон SIMILAR формируется из трех шаблонов регулярных выражений SQL: R1, R2 и R3.Полностью шаблон имеет форму R1 || '<escape>"' || R2 || '<escape>"' || R3, где <escape> — это escape-символ, определенный в предложении ESCAPE.R2 — это шаблон, который соответствует подстроке для извлечения и заключен в экранированные двойные кавычки (<escape>", например, “#"” с escape-символом ‘#’). R1 соответствует префиксу строки, а R3 — суффиксу строки.И R1, и R3 необязательны (они могут быть пустыми), но шаблон должен соответствовать всей строке.Другими словами, недостаточно указать шаблон, который находит только подстроку для извлечения.

Tip

Экранированные двойные кавычки вокруг R2 можно сравнить с определением одной группы захвата в более распространенном синтаксисе регулярных выражений, таком как PCRE.То есть полный шаблон эквивалентен R1(R2)R3, который должен соответствовать всей входной строке, а группа захвата — это возвращаемая подстрока.

Возвращаемое значение соответствует части R2 регулярного выражения.Для этого значения истинно выражение

str SIMILAR TO R1 || R2 || R3 ESCAPE <escape>
Note

Если любая часть шаблона из R1, R2 или R3 не является пустой строкой и не имеет формата регулярного выражения SQL, возникает исключение.

Полный формат регулярных выражений SQL описан в Синтаксис регулярных выражений SQL.

Example 2. Использование функции SUBSTRING с регулярными выражениями
SUBSTRING('abcabc' SIMILAR 'a#"bcab#"c' ESCAPE '#')  -- bcab
SUBSTRING('abcabc' SIMILAR 'a#"%#"c' ESCAPE '#')     -- bcab
SUBSTRING('abcabc' SIMILAR '_#"%#"_' ESCAPE '#')     -- bcab
SUBSTRING('abcabc' SIMILAR '#"(abc)*#"' ESCAPE '#')  -- abcabc
SUBSTRING('abcabc' SIMILAR '#"abc#"' ESCAPE '#')     -- <null>

TRIM()

Доступно в

DSQL, PSQL

Синтаксис
TRIM ([<adjust>] str)

<adjust> ::=  {[<where>] [what]} FROM

<where> ::=  BOTH | LEADING | TRAILING
Table 1. Параметры функции TRIM
Параметр Описание

str

Выражение строкового типа.

where

Из какого места необходимо удалить подстроку — BOTH | LEADING | TRAILING.По умолчанию BOTH.

what

Подстрока, которую надо удалить (неоднократно, если таких вхождений несколько) из входной строки str в её начале и/или конце.По умолчанию является пробелом (' ').

Тип возвращаемого результата:

VARCHAR или BLOB

Функция TRIM удаляет начальные и /или концевые пробелы (или текст согласно настройкам) из входной строки.

Note
Особенности использования
  • Если входной параметр str имеет тип BLOB, то и результат будет иметь тип BLOB. В противном случае результат будет иметь тип VARCHAR(n), где n является длиной параметра str;

  • Подстрока для удаления, если она, конечно, задана, не должна иметь длину больше, чем 32767 байта. Однако при повторениях подстроки в начале и/или конце входного параметра str общее число удаляемых байтов может быть гораздо больше.

Warning

При использовании BLOB в параметрах функции может потребоваться загрузить объект в память полностью.При больших объёмах BLOB могут наблюдаться потери производительности.

Примеры TRIM

Example 1. Использование функции TRIM
SELECT TRIM (' Waste no space ')
FROM RDB$DATABASE -- Результат: 'Waste no space'

SELECT TRIM (LEADING FROM ' Waste no space ')
FROM RDB$DATABASE -- Результат: 'Waste no space '

SELECT TRIM (LEADING '.' FROM ' Waste no space ')
FROM RDB$DATABASE -- Результат: ' Waste no space '

SELECT TRIM (TRAILING '!' FROM 'Help!!!!')
FROM RDB$DATABASE -- Результат: 'Help'

SELECT TRIM ('la' FROM 'lalala I love you Ella')
FROM RDB$DATABASE -- Результат: ' I love you El'

UNICODE_CHAR()

Доступно в

DSQL, PSQL

Синтаксис
UNICODE_CHAR (number)
Table 1. Параметры функции UNICODE_CHAR
Параметр Описание

number

Допустимая кодовая точка UTF-32 вне диапазона суррогатов верхней/нижней границы (от 0xD800 до 0xDFFF). В противном случае будет выдана ошибка.

Тип возвращаемого результата:

CHAR CHARACTER SET UTF8

Функция UNICODE_CHAR возвращает UNICODE символ для заданной кодовой точки.

Примеры UNICODE_CHAR

Example 1. Использование функции UNICODE_CHAR
select unicode_char(x) from y;

UNICODE_VAL()

Доступно в

DSQL, PSQL

Синтаксис
UNICODE_VAL (string)
Table 1. Параметры функции UNICODE_VAL
Параметр Описание

string

Строка.

Тип возвращаемого результата:

INTEGER

Функция UNICODE_VAL возвращает UTF-32 кодовую точку для первого символа в строке. Возвращает 0 для пустой строки.

Примеры UNICODE_VAL

Example 1. Использование функции UNICODE_VAL
select unicode_val(x) from y;

UPPER()

Доступно в

DSQL, PSQL

Синтаксис
UPPER (str)
Table 1. Параметры функции UPPER
Параметр Описание

str

Выражение строкового типа.

Тип возвращаемого результата:

[VAR]CHAR или BLOB

Функция UPPER возвращает входную строку в верхнем регистре.Точный результат зависит от набора символов входной строки.Например, для наборов символов NONE и ASCII только ASCII символы переводятся в верхний регистр; для OCTETS — вся входная строка возвращается без изменений.

Примеры UPPER

Example 1. Использование функции UPPER
select upper(_iso8859_1 'Débâcle')
from rdb$database
-- returns 'DÉBÂCLE'

select upper(_iso8859_1 'Débâcle' collate fr_fr)
from rdb$database
-- returns 'DEBACLE', following French uppercasing rules
См. также:

[fblangref-scalarfuncs-lower].

BASE64_DECODE()

Доступно в

DSQL, PSQL

Синтаксис
BASE64_DECODE (base64_data)
Table 1. Параметры функции BASE64_DECODE
Параметр Описание

base64_data

Данные в кодировке Base64, дополненные знаком = до длины кратной 4

Тип возвращаемого результата

BLOB или VARBINARY

BASE64_DECODE декодирует строку с данными закодированными алгоритмом base64и возвращает декодированное значение как VARBINARY или BLOB в зависимости от входного аргумента.

Если длина типа base64_data не кратна 4, то во время подготовки возникает ошибка.Если длина значения base64_data не кратна 4, то во время выполнения возникает ошибка.

Когда входной аргумент не является BLOB, то длина результирующего типа вычисляется какtype_length * 3/4, где type_length — максимальная длина в байтах типа входного аргумента.

Примеры BASE64_DECODE

Example 1. Использование BASE64_DECODE
select cast(base64_decode('VGVzdCBiYXNlNjQ=') as varchar(12))
from rdb$database;
CAST

============
Test base64

BASE64_ENCODE()

Доступно в

DSQL, PSQL

Синтаксис
BASE64_ENCODE (binary_data)
Table 1. Параметры функции BASE64_ENCODE
Параметр Описание

binary_data

Двоичные данные для кодирования

Тип возвращаемого результата

VARCHAR CHARACTER SET ASCII или BLOB SUB_TYPE TEXT CHARACTER SET ASCII

Функция BASE64_ENCODE кодирует binary_data с помощью алгоритма base64 ивозвращает закодированное значение как VARCHAR CHARACTER SET ASCII или BLOB SUB_TYPE TEXT CHARACTER SET ASCIIв зависимости от типа входного аргумента.Возвращаемое значение дополняется знаком ‘=’, чтобы его длина была кратна 4.

Когда входной аргумент не является BLOB, длина результирующего типа вычисляется как type_length * 4 / 3 с округлением в большую сторону до числа, кратного четырем, где type_length — максимальная длина входного типа в байтах.

Примеры BASE64_ENCODE

Example 1. Использование функции BASE64_ENCODE
select base64_encode('Test base64')
from rdb$database;
BASE64_ENCODE
================
VGVzdCBiYXNlNjQ=

BIT_LENGTH()

Доступно в

DSQL, PSQL

Синтаксис
BIT_LENGTH (string)
Table 1. Параметры функции BIT_LENGTH
Параметр Описание

string

Выражение строкового типа.

Тип возвращаемого результата:

BIGINT

Функция BIT_LENGTH возвращает длину входной строки в битах.Для многобайтных наборов символов результат может быть в 8 раз больше, чем количество символов в “формальном” числе байт на символ, записанном в RDB$CHARACTER_SETS.

С параметрами типа CHAR эта функция берет во внимание всю формальную строковую длину (например, объявленная длина поля или переменной). Если вы хотите получить “логическую” длину в битах, не считая пробелов, то перед передачей аргумента в BIT_LENGTH надо выполнить над ним операцию RIGHT TRIM.

Примеры BIT_LENGTH

Example 1. Использование функции BIT_LENGTH
SELECT BIT_LENGTH ('Hello!') FROM RDB$DATABASE
-- возвращает 48

SELECT BIT_LENGTH (_ISO8859_1 'Grüß Di!')
FROM RDB$DATABASE
-- возвращает 64: каждый, и ü, и ß занимают один байт в ISO8859_1

SELECT BIT_LENGTH (
CAST (_ISO8859_1 'Grüß di!' AS VARCHAR (24)
CHARACTER SET UTF8))
FROM RDB$DATABASE
-- возвращает 80: каждый, и ü, и ß занимают по два байта в UTF8

SELECT BIT_LENGTH (
CAST (_ISO8859_1 'Grüß di!' AS CHAR (24)
CHARACTER SET UTF8))
FROM RDB$DATABASE
-- возвращает 208: размер всех 24 позиций CHAR и два из них 16-битные