Функции для работы с контекстными переменными
Функции для работы со строками
Функции для работы с датой и временем
Функции для работы с типом BLOB
Функции для работы с типом DECFLOAT
RDB$GET_CONTEXT()DSQL, PSQL
RDB$GET_CONTEXT('<namespace>', 'varname')
<namespace> ::= SYSTEM | DDL_TRIGGER | USER_SESSION | USER_TRANSACTION
| Параметр | Описание |
|---|---|
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.
SYSTEMCLIENT_ADDRESSАдрес клиента. Для TCP – IP адрес, для XNET – локальный ID процесса. Дляостальных случаев NULL.
CLIENT_HOSTИмя хоста сетевого протокола удаленного клиента. Значениевозвращается для всех поддерживаемых протоколов.
CLIENT_OS_USERИмя пользователя операционной системы на клиентском компьютере.
CLIENT_PIDPID процесса на клиентском компьютере.
CLIENT_PROCESSПолный путь к клиентскому приложению, подключившемуся к базеданных.
CLIENT_VERSIONВерсия клиентской библиотеки (fbclient), используемой клиентским приложением.
CURRENT_ROLEГлобальная переменная CURRENT_ROLE.
CURRENT_USERГлобальная переменная CURRENT_USER.
DB_NAMEКаноническое имя текущей базы данных. Это либо имя псевдонима(если соединение с помощью имён файлов запрещено DatabaseAccess = NONE) или,в противном случае, полностью расширенное имя файла базы данных.
DB_FILE_IDУникальный идентификатор текущей базы данных на уровнефайловой системы.
DB_GUIDGUID базы данных.
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.
DDL_TRIGGERИспользование пространства имён DDL_TRIGGER допустимо, только во время работы DDL триггера.Его использование также допустимо в хранимых процедурах и функциях, вызванных триггерами DDL.
Контекст DDL_TRIGGER работает как стек.Перед возбуждением DDL триггера, значения, относящиеся к выполняемой команде, помещаются в этот стек.После завершения работы триггера значения выталкиваются.Таким образом в случае каскадных DDL операторов, когда каждая пользовательская DDL команда возбуждает DDL триггер, и этот триггер запускает другие DDL команды, с помощью EXECUTE STATEMENT, значения переменных в пространстве имён DDL_TRIGGER будут соответствовать команде, которая вызвала последний DDL триггер в стеке вызовов.
DDL_TRIGGEREVENT_TYPEтип события (CREATE, ALTER, DROP).
OBJECT_TYPEтип объекта (TABLE, VIEW и др.).
DDL_EVENT(<ddl event item>), где <ddl_event_item> это EVENT_TYPE || ' ' || OBJECT_TYPE
имя объекта метаданных.
имя объекта метаданных до переименования.
имя объекта метаданных после переименования.
текст SQL запроса.
|
Note
|
Ещё раз обратите внимание на то, что пространства имён и имена переменных регистрочувствительны, должны быть не пустыми строками, и заключены в кавычки! |
NEW.USER_ADR = RDB$GET_CONTEXT ('SYSTEM', 'CLIENT_ADDRESS');
RDB$SET_CONTEXT()DSQL, PSQL
RDB$SET_CONTEXT('<namespace>', 'varname', {<value> | NULL})
<namespace> ::= USER_SESSION | USER_TRANSACTION
| Параметр | Описание |
|---|---|
namespace |
Пространство имён. |
varname |
Имя переменной.Зависит от регистра.Максимальная длина 80 байт. |
value |
Данные любого типа при условии, что их можно привести к типу VARCHAR(255) CHARACTER SET NONE. |
INTEGER
Функция RDB$SET_CONTEXT создаёт, устанавливает значение или обнуляет переменную в одном из используемых пользователем пространстве имён: USER_SESSION или USER_TRANSACTION.
Функция возвращает 1, если переменная уже существовала до вызова и 0, если не существовала.Для удаления переменной надо установить её значение в NULL.Если данное пространство имён не существует, то функция вернёт ошибку.Пространство имён и имя переменной зависят от регистра, должны быть не пустыми строками, и заключены в кавычки.
|
Note
|
|
RDB$SET_CONTEXTSELECT 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;
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;
CHAR_TO_UUID()DSQL, PSQL
CHAR_TO_UUID (ascii_uuid)
| Параметр | Описание |
|---|---|
ascii_uuid |
36-символьное представление UUID.‘ |
BINARY(16)
Функция CHAR_TO_UUID преобразует читабельную 36-ти символьную символику UUID к соответствующему 16-ти байтовому значению UUID.
CHAR_TO_UUIDCHAR_TO_UUIDSELECT 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_UUIDGEN_UUIDSELECT GEN_UUID() AS GUID FROM RDB$DATABASE
GUID ======== 017347BFE212B2479C00FA4323B36320
UUID_TO_CHAR()DSQL, PSQL
UUID_TO_CHAR (uuid)
| Параметр | Описание |
|---|---|
uuid |
16-байтный UUID. |
CHAR(36)
Функция UUID_TO_CHAR конвертирует 16-ти байтный UUID в его 36-ти знаковое ASCII человеко-читаемое представление.Тип возвращаемого значения CHAR(36).
UUID_TO_CHARUUID_TO_CHARSELECT 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)
| Параметр | Описание |
|---|---|
generator-name |
Имя генератора (последовательности). |
step |
Шаг приращения. |
BIGINT
Функция GEN_ID увеличивает значение генератора или последовательности и возвращает новое значение.
Если step равен 0, функция не будет ничего делать со значением генератора и вернёт его текущее значение.
Начиная с Firebird 2.0 для получения следующего значение последовательности (генератора) стало доступно использованиесовместимого с SQL-стандартом оператора NEXT VALUE FOR.
Если значение параметра step меньше нуля, произойдёт уменьшение значения генератора.Следует быть крайне аккуратным при таких манипуляциях в базе данных, они могут привести к потере целостности данных.
GEN_IDGEN_IDNEW.ID = GEN_ID (GEN_TABLE_ID, 1);
COALESCE()DSQL, PSQL
COALESCE (<exp1>, <exp2> [, <expN> ... ])
| Параметр | Описание |
|---|---|
exp1, exp2 … expN |
Выражения любого совместимого типа. |
зависит от типов входных аргументов
Функция COALESCE принимает два или более аргумента возвращает значение первого не-NULL аргумента.Если все аргументы имеют значение NULL, то и результат будет NULL.
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
В данном примере в случае получения при суммировании значения 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
| Параметр | Описание |
|---|---|
testexpr |
Выражения любого совместимого типа, которое сравнивается с выражениями |
expr1, expr2, … exprN |
Выражения любого совместимого типа, с которыми сравнивают с выражением |
result1, result2, … resultN |
Возвращаемые выражения любого типа. |
defaultresult |
Выражение, возвращаемое если ни одно из условий не было выполнено. |
зависит от типов входных аргументов
Данная функция эквивалентна конструкции Простой CASE, в которой заданное выражение сравнивается с другими выражениями до нахождения совпадения.Результатом является значение, указанное после выражения, с которым найдено совпадение.Если совпадений не найдено, то возвращается значение по умолчанию (если оно, конечно, задано — в противном случае возвращается NULL).
|
Caution
|
Совпадение эквивалентно оператору ‘ |
DECODEDECODEselect name,
age,
decode(upper(sex),
'M', 'Male',
'F', 'Female',
'Unknown'),
religion
from people
CASE.
IIF()DSQL, PSQL
IIF (<condition>, ResultT, ResultF)
| Параметр | Описание |
|---|---|
condition |
Выражение логического типа. |
resultT |
Возвращаемое значение, если condition является истинным. |
resultF |
Возвращаемое значение, если condition является ложным. |
зависит от типов входных аргументов
Функция IIF имеет три аргумента.Если первый аргумент является истиной, то результатом будет второй параметр, в противном случае результатом будет третий параметр.
Оператор IIF также можно сравнить в тройным оператором “?:” в C-подобных языках.
|
Note
|
По сути, функция CASE WHEN <condition> THEN resultT ELSE resultF END |
IIFIIFSELECT IIF(SEX = 'M', 'Sir', 'Madam') FROM CUSTOMERS
CASE.
MAXVALUE()DSQL, PSQL
MAXVALUE (<expr1> [, ... , <exprN> ])
| Параметр | Описание |
|---|---|
expr1 … exprN |
Выражения любого совместимого типа. |
тот же что и первый аргумент функции expr1
Возвращает максимальное значение из входного списка чисел, строк или параметров с типом DATE/TIME/TIMESTAMP.
|
Note
|
Если один или более входных параметров имеют значение |
MAXVALUEMAXVALUESELECT MAXVALUE(PRICE_1, PRICE_2) AS PRICE
FROM PRICELIST
MINVALUE()DSQL, PSQL
MINVALUE (<expr1> [, ... , <exprN> ])
| Параметр | Описание |
|---|---|
expr1 … exprN |
Выражения любого совместимого типа. |
тот же что и первый аргумент функции expr1
Возвращает минимальное значение из входного списка чисел, строк или параметров с типом DATE/TIME/TIMESTAMP.
|
Note
|
Если один или более входных параметров имеют значение |
MINVALUEMINVALUESELECT MINVALUE(PRICE_1, PRICE_2) AS PRICE
FROM PRICELIST
NULLIF()DSQL, PSQL
NULLIF (<exp1>, <exp2>)
| Параметр | Описание |
|---|---|
expr1, expr2 |
Выражения любого совместимого типа. |
зависит от типов входных аргументов
Функция возвращает значение первого аргумента, если он неравен второму.В случае равенства аргументов возвращается NULL.
NULLIFNULLIFSELECT 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
| Параметр | Описание |
|---|---|
rel_name |
Имя таблицы. |
rel_id |
Идентификатор таблицы.Можно найти в |
recnum |
Номер записи.Либо абсолютный (если dpnum и ppnum отсутствуют), либо относительный (если dpnum присутствует) |
dpnum |
Номер страницы данных DP.Либо абсолютный (если ppnum отсутствует), либо относительный (если ppnum присутствует) |
ppnum |
Номер страницы указателей на данные PP. |
Функция MAKE_DBKEY создаёт значение DBKEY, используя имя или идентификатор таблицы, номер записи и, необязательно, логический номер страницы данных и страницы указателя.
|
Note
|
Замечания
|
Запрос выбирает запись, используя имя таблицы (имя таблицы в верхнем регистре)
select * from rdb$relations where rdb$db_key = make_dbkey('RDB$RELATIONS', 0)
Запрос выбирает запись, используя идентификатор таблицы
select * from rdb$relations where rdb$db_key = make_dbkey(6, 0)
Запрос выбирает все записи, которые физически находятся на первой странице данных в таблице
select * from rdb$relations
where rdb$db_key >= make_dbkey(6, 0, 0)
and rdb$db_key < make_dbkey(6, 0, 1)
Запрос выбирает все записи, которые физически находятся на первой странице данных 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:
EXCEPTIONфункция возвращает имя исключения, если активно исключение определённое пользователем, или NULL если активно одно из системных исключений.Для контекста EXCEPTION тип возвращаемого значения: VARCHAR(63) CHARACTER SET UTF8.
MESSAGEфункция возвращает интерпретированный текст активного исключения.Для контекста MESSAGE тип возвращаемого значения: VARCHAR(1024) CHARACTER SET UTF8.
GDSCODEфункция возвращает значение контекстной переменной GDSCODE.
SQLCODEфункция возвращает значение контекстной переменной SQLCODE.
SQLSTATEфункция возвращает значение контекстной переменной SQLSTATE.
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)
| Параметр | Описание |
|---|---|
transaction_id |
Номер (идентификатор) транзакции |
BIGINT
Возвращает номер подтверждения (Commit Number) для заданной транзакции.
|
Note
|
Внутренние механизмы Firebird используют беззнаковое 8-байтное целое для Commit Number и беззнаковое 6-байтное целое для номера транзакции.Поэтому, несмотря на то, что язык SQL не имеет без знаковых целых, а |
Если функция RDB$GET_TRANSACTION_CN возвращает значение больше 1, то это фактический (Commit Number) транзакции,то есть эта транзакция была зафиксирована после запуска базы данных.
В остальных случая функция может возвращать одно из следующих результатов, указывающих статус фиксации транзакции:
-2
|
мёртвые транзакции (отмененные); |
-1
|
зависшие транзакции (в состоянии limbo 2PC транзакций); |
0
|
активные транзакции; |
1
|
для транзакций подтверждённых до старта базы данных или с номером меньше чем OIT (Oldest Interesting Transaction); |
NULL
|
если номер транзакции равен |
RDB$GET_TRANSACTION_CNselect 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)
| Параметр | Описание |
|---|---|
role_name |
Имя роли использование которой проверяется |
BOOLEAN
Функция RDB$ROLE_IN_USE возвращает используется ли роль текущим пользователем.
|
Note
|
Данная функция позволяет проверить использование любой роли: указанной явно (при входе в систему или изменённой с помощью оператора SET ROLE) и назначенной неявно (роли назначенные пользователю с использованием предложения DEFAULT). |
RDB$ROLE_IN_USE-- Проверяем используется ли явно назначенная или
-- неявно полученная роль MANAGER
IF (RDB$ROLE_IN_USE('MANAGER')) THEN
BEGIN
...
END
SELECT * FROM RDB$ROLES WHERE RDB$ROLE_IN_USE(RDB$ROLE_NAME)
RDB$SYSTEM_PRIVILEGE()DSQL, PSQL
RDB$SYSTEM_PRIVILEGE (<privilege>)
| Параметр | Описание |
|---|---|
privilege |
Проверяемая системная привилегия |
BOOLEAN
Функция RDB$SYSTEM_PRIVILEGE используется системная привилегия текущим соединением.Список системных привилегий см.в CREATE ROLE.
RDB$SYSTEM_PRIVILEGESELECT RDB$SYSTEM_PRIVILEGE(USER_MANAGEMENT) FROM RDB$DATABASE;
ABS()DSQL, PSQL
ABS (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа |
тот же что и входной аргумент.
Функция ABS возвращает абсолютное значение (модуль) аргумента.
COS()DSQL, PSQL
COS (angle)
| Параметр | Описание |
|---|---|
angle |
Угол, выраженный в радианах. |
DOUBLE PRECISION
Функция COS возвращает косинус угла.Аргумент должен быть задан в радианах.
Любой NOT NULL результат находится в диапазоне [-1, 1].
COSH()DSQL, PSQL
COSH (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция COSH возвращает гиперболический косинус аргумента.
Любой NOT NULL результат находится в диапазоне [1, +∞].
COT()DSQL, PSQL
COT (angle)
| Параметр | Описание |
|---|---|
angle |
Угол, выраженный в радианах. |
DOUBLE PRECISION
Функция COT возвращает котангенс угла.Аргумент должен быть задан в радианах.
EXP()DSQL, PSQL
EXP (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция EXP возвращает значение натуральной экспоненты, enumber
FLOOR()DSQL, PSQL
FLOOR (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
BIGINT, INT128, DECFLOAT или DOUBLE PRECISION в зависимости от типа аргумента.
Функция FLOOR возвращает целое число, меньшее или равное аргументу.
LN()DSQL, PSQL
LN (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция LN возвращает натуральный логарифм аргумента.
|
Note
|
В случае если передан отрицательный или нулевой аргумент функция вернёт ошибку. |
LOG()DSQL, PSQL
LOG (x, y)
| Параметр | Описание |
|---|---|
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)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция LOG10 возвращает десятичный логарифм аргумента.
|
Note
|
Если входной аргумент отрицательный или равен 0, возникает ошибка. |
MOD()DSQL, PSQL
MOD (a, b)
| Параметр | Описание |
|---|---|
a |
Выражение числового типа. |
b |
Выражение числового типа. |
INTEGER, BIGINT или INT128 в зависимости от типов аргументов.
Функция MOD возвращает остаток от целочисленного деления.
|
Note
|
Вещественные числа округляются до выполнения деления.Например, результатом “ |
PI()DSQL, PSQL
PI ()
DOUBLE PRECISION
Функция PI возвращает число π.
ACOS()DSQL, PSQL
ACOS (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа в диапазоне [-1; 1]. |
DOUBLE PRECISION
Функция ACOS возвращает арккосинус (в радианах) аргумента.
В случае если аргумент функции вне границы диапазона [-1, 1], то функция вернёт неопределённое значения NaN.
POWER()DSQL, PSQL
POWER (x, y)
| Параметр | Описание |
|---|---|
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])
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
scale |
Масштаб — целое число, определяющее число десятичных разрядов, к которым должен быть проведено округление, т.е.
По умолчанию 0. |
масштабируемое целое (INTEGER, BIGINT или INT128) или DECFLOAT, или DOUBLE PRECISION в зависимости от типа number.
Функция ROUND округляет число до ближайшего целого числа.Если дробная часть равна 0.5, то округление до ближайшего большего целого числа для положительных чисел и до ближайшего меньшего для отрицательных чисел.С дополнительным опциональным параметром scale число может быть округлено до одной из степеней числа 10 (десятки, сотни, десятые части, сотые части и т.д.) вместо просто целого числа.
|
Note
|
Если используется параметр scale, то результат имеет такой же масштаб, как и первый параметр number. |
ROUNDROUNDROUND(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
SIGN()DSQL, PSQL
SIGN (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
SMALLINT
Функция SIGN возвращает знак входного параметра.
-1 — число меньше нуля
0 — число равно нулю
1 — число больше нуля
SIN()DSQL, PSQL
SIN (angle)
| Параметр | Описание |
|---|---|
angle |
Угол, выраженный в радианах. |
DOUBLE PRECISION
Функция SIN возвращает синус угла.Аргумент должен быть задан в радианах.
Любой NOT NULL результат находится в диапазоне [-1, 1].
SINH()DSQL, PSQL
SINH (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция SINH возвращает гиперболический синус аргумента.
SQRT()DSQL, PSQL
SQRT (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция SQRT возвращает квадратный корень аргумента.
TAN()DSQL, PSQL
TAN (angle)
| Параметр | Описание |
|---|---|
angle |
Угол, выраженный в радианах. |
DOUBLE PRECISION
Функция TAN возвращает тангенс угла.Аргумент должен быть задан в радианах.
TANH()DSQL, PSQL
TANH (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция TANH возвращает гиперболический тангенс аргумента.
Любой NOT NULL результат находится в диапазоне [-1, 1].
TRUNC()DSQL, PSQL
TRUNC (number [, scale])
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
scale |
Масштаб — целое число, определяющее число десятичных разрядов, к которым должен быть проведено усечение, т.е.
По умолчанию 0. |
масштабируемое целое (INTEGER, BIGINT или INT128) или DECFLOAT, или DOUBLE PRECISION в зависимости от типа number.
Функция TRUNC усекает число до ближайшего целого числа.С дополнительным опциональным параметром scale число может быть усечено до одной из степеней числа 10 (десятки, сотни, десятые части, сотые части и т.д.) вместо просто целого числа.
|
Note
|
Если используется параметр scale, то результат имеет такой же масштаб, как и первый параметр number. |
|
Important
|
Функция всегда увеличивает отрицательные числа, поскольку она обрезает дробную часть. |
TRUNCTRUNC(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)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа в диапазоне [1; +∞]. |
DOUBLE PRECISION
Функция ACOSH возвращает гиперболический арккосинус (в радианах) аргумента.
ASIN()DSQL, PSQL
ASIN (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа в диапазоне [-1; 1]. |
DOUBLE PRECISION
Функция ASIN возвращает арксинус (в радианах) аргумента.
В случае если аргумент функции вне границы диапазона [-1, 1], то функция вернёт неопределённое значения NaN.
ASINH()DSQL, PSQL
ASIN (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция ASINH возвращает гиперболический арксинус (в радианах) аргумента.
ATAN()DSQL, PSQL
ATAN (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция ATAN возвращает арктангенс аргумента.
Функция возвращает угол в радианах в диапазоне [-π/2; π/2].
ATAN2()DSQL, PSQL
ATAN2 (y, x)
| Параметр | Описание |
|---|---|
y |
Выражение числового типа. |
x |
Выражение числового типа. |
DOUBLE PRECISION
Функция ATAN2 возвращает угол как отношение синуса к косинусу, аргументы, у которых задаются этими двумя параметрами, а знаки синуса и косинуса соответствуют знакам параметров.Это позволяет получать результаты по всей окружности, включая углы -π/2 и π/2.
Особенности использования:
Результат — угол в диапазоне [-π, π] радиан;
Если х отрицательный, то при нулевом значении y результат равен π, а при значении 0 равен -π;
Если и y и x равны 0, то результат бессмыслен.
|
Note
|
|
ATANH()DSQL, PSQL
ATANH (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция ATANH возвращает гиперболический арктангенс (в радианах) аргумента.
CEIL(), CEILING()DSQL, PSQL
CEIL[ING] (number)
| Параметр | Описание |
|---|---|
number |
Выражение числового типа. |
BIGINT, INT128, DECFLOAT или DOUBLE PRECISION в зависимости от типа аргумента.
Функция CEIL возвращает наименьшее целое число, большее или равное аргументу.
ASCII_CHAR()DSQL, PSQL
ASCII_CHAR (code)
| Параметр | Описание |
|---|---|
code |
Целое число в диапазоне от 0 до 255. |
CHAR(1) CHARACTER SET NONE.
Функция ASCII_CHAR возвращает ASCII символ соответствующий номеру, переданному в качестве аргумента.
LEFT()DSQL, PSQL
LEFT (string, length)
| Параметр | Описание |
|---|---|
string |
Выражение строкового типа. |
length |
Целое число.Определяет количество возвращаемых символов. |
VARCHAR или BLOB.
Функция LEFT возвращает левую часть строки, количество возвращаемых символов определяется вторым параметром.
Особенности использования:
Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;
Если строковый аргумент BLOB, результатом будет BLOB, в противном случае результатом будет VARCHAR(N), при этом N – будет равно длине строкового параметра;
Если числовой параметр превысит длину текста, результатом будет исходный текст.
|
Warning
|
При использовании |
SELECT LEFT('ABC', 2) FROM rdb$database;
-- результат AB
LOWER()DSQL, PSQL, ESQL
LOWER (string)
| Параметр | Описание |
|---|---|
string |
Выражение строкового типа. |
VAR[CHAR] или BLOB
Функция LOWER возвращает входную строку в нижнем регистре.Точный результат зависит от набора символов входной строки.Например, для наборов символов NONE и ASCII только ASCII символы переводятся в нижний регистр; для OCTETS — вся входная строка возвращается без изменений.
LOWERLOWER
select Sherifffrom Townswhere lower(Name) = 'cooper''s valley'
LPAD()DSQL, PSQL
LPAD (str, endlen [, padstr])
| Параметр | Описание |
|---|---|
str |
Выражение строкового типа. |
endlen |
Длина выходной строки. |
padstr |
Строка, которой дополняется исходная строка до указанной длины.По умолчанию является пробелом (“ |
VARCHAR или BLOB.
Функция LPAD дополняет слева входную строку пробелами или определённой пользователем строкой до заданной длины.
Особенности использования:
Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;
Если входная строка имеет тип BLOB, то результат также будет BLOB, в противном случае результат будет VARCHAR(endlen).
Если аргумент padstr задан, но равен '' (пустой строке), то дополнения строки не происходит! В случае если endlen меньше длины входной строки, то в результате происходит её усечение до длины endlen, даже если параметр padstr равен пустой строке.
|
Warning
|
При использовании |
LPADLPADLPAD ('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'
OCTET_LENGTH()DSQL, PSQL
OCTET_LENGTH (string)
| Параметр | Описание |
|---|---|
string |
Выражение строкового типа. |
BIGINT
Функция OCTET_LENGTH возвращает количество байт занимаемое строкой.
При работе с параметрами типа CHAR функция возвращает значение всей формальной строковой длины.Для того чтобы узнать “логическую” длину строки в байтах, то перед передачей аргумента функции следует применить RIGHT TRIM.
|
Note
|
Следует помнить, что не во всех наборах символов количество байт занимаемых строкой равно количеству символов. |
OCTET_LENGTHOCTET_LENGTHSELECT 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])
| Параметр | Описание |
|---|---|
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
|
При использовании |
OVERLAYOVERLAYOVERLAY ('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])
| Параметр | Описание |
|---|---|
substr |
Подстрока, позиция которой ищется. |
string |
Строка, в которой ищется позиция. |
startpos |
Позиция, с которой начинается поиск подстроки. |
INTEGER
Функция POSITION возвращает позицию первого вхождения подстроки в строку.Отсчёт начинается с 1.Третий аргумент (опциональный) задаёт позицию в строке, с которой начинается поиск подстроки, тем самым игнорирую любые вхождения подстроки в строку до этой позиции.Если совпадение не найдено, функция возвращает 0.
Особенности использования:
Опциональный третий параметр поддерживается только вторым вариантом синтаксиса (синтаксис с запятой);
Пустую строку, функция считает подстрокой любой строки. Поэтому при входном параметре substr, равном '' (пустая строка), и при параметре string, отличном от NULL, результатом будет:
1, если параметр startpos не задан;
startpos, если startpos не превышает длину параметра string;
0, если startpos больше длины параметра string.
POSITIONPOSITIONPOSITION ('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)
| Параметр | Описание |
|---|---|
str |
Строка, в которой делается замена. |
find |
Строка, которая ищется. |
repl |
Строка, на которую происходит замена. |
VARCHAR или BLOB
Функция REPLACE заменяет в строке все вхождения одной строки на другую строку.
Особенности использования:
Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;
Если один из аргументов имеет тип BLOB, то результат будет иметь тип BLOB. В противном случае результат будет иметь тип VARCHAR(N), где N рассчитывается из длин str, find и repl таким образом, что даже максимальное количество замен не будет вызывать переполнения поля.
Если параметр find является пустой строкой, то возвращается str без изменений;
Если параметр repl является пустой строкой, то все вхождения find удаляются из строки str;
Если любой из аргументов равен NULL, то результатом всегда будет NULL, даже если не было произведено ни одной замены.
|
Warning
|
При использовании |
REPLACEREPLACEREPLACE ('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'
REVERSE()DSQL, PSQL
REVERSE (string)
| Параметр | Описание |
|---|---|
string |
Выражение строкового типа. |
VARCHAR
Функция REVERSE возвратит строку перевёрнутую "задом наперёд".
REVERSEREVERSEREVERSE ('spoonful') -- возвращает 'lufnoops'
REVERSE ('Was it a cat I saw?') -- возвращает '?was I tac a ti saW'
|
Tip
|
Данная функция очень удобна, если вам предстоит обработать (сортировать или группировать) информацию, которая находится в конце строки.Пример такой информации – доменные имена или имена адресов электронной почты.
|
RIGHT()DSQL, PSQL
RIGHT (string, length)
| Параметр | Описание |
|---|---|
string |
Выражение строкового типа. |
length |
Целое число.Определяет количество возвращаемых символов. |
VARCHAR или BLOB
Функция RIGHT возвращает конечную (правую) часть входной строки.Длина возвращаемой подстроки определяется вторым параметром.
Особенности использования:
Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;
Если строковый аргумент BLOB, результатом будет BLOB, в противном случае результатом будет VARCHAR(N), при этом N — будет равно длине строкового параметра;
Если числовой параметр превысит длину текста, результатом будет исходный текст.
|
Warning
|
При использовании |
RIGHTSELECT RIGHT('ABC', 1) FROM rdb$database;
-- результат C
RPAD()DSQL, PSQL
RPAD (str, endlen [, padstr])
| Параметр | Описание |
|---|---|
str |
Выражение строкового типа. |
endlen |
Длина выходной строки. |
padstr |
Строка, которой дополняется исходная строка до указанной длины.По умолчанию является пробелом ( |
VARCHAR или BLOB
Функция RPAD дополняет справа входную строку пробелами или определённой пользователем строкой до заданной длины.
Особенности использования:
Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;
Если входная строка имеет тип BLOB, то результат также будет BLOB, в противном случае результат будет VARCHAR(endlen).
Если аргумент padstr задан, но равен '' (пустой строке), то дополнения строки не происходит! В случае если endlen меньше длины входной строки, то в результате происходит её усечение до длины endlen, даже если параметр padstr равен пустой строке.
|
Warning
|
При использовании |
RPADRPADRPAD ('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'
ASCII_VAL()DSQL, PSQL
ASCII_VAL (ch)
| Параметр | Описание |
|---|---|
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>
| Параметр | Описание |
|---|---|
str |
Выражение строкового типа. |
startpos |
Позиция, с которой начинается извлечение подстроки.Целочисленное выражение. |
length |
Длина возвращаемой подстроки.Целочисленное выражение. |
similar-pattern |
Шаблон регулярного выражения SQL, по которому ищется подстрока. |
escape |
Символ экранирования. |
VARCHAR или BLOB
Функция SUBSTRING возвращает подстроку из строки, начиная с заданной позиции до конца строки или до указанной длины, либо извлекает подстроку с использованием шаблона регулярного выражения SQL.
Если любой из входных параметров имеет значение NULL, то и результат тоже будет иметь значение NULL.
|
Warning
|
При использовании |
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.
SUBSTRINGselect 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.То есть полный шаблон эквивалентен Возвращаемое значение соответствует части R2 регулярного выражения.Для этого значения истинно выражение
|
|
Note
|
Если любая часть шаблона из R1, R2 или R3 не является пустой строкой и не имеет формата регулярного выражения SQL, возникает исключение. |
Полный формат регулярных выражений SQL описан в Синтаксис регулярных выражений SQL.
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
| Параметр | Описание |
|---|---|
str |
Выражение строкового типа. |
where |
Из какого места необходимо удалить подстроку — |
what |
Подстрока, которую надо удалить (неоднократно, если таких вхождений несколько) из входной строки str в её начале и/или конце.По умолчанию является пробелом ( |
VARCHAR или BLOB
Функция TRIM удаляет начальные и /или концевые пробелы (или текст согласно настройкам) из входной строки.
|
Note
|
Особенности использования
|
|
Warning
|
При использовании |
TRIMTRIMSELECT 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)
| Параметр | Описание |
|---|---|
number |
Допустимая кодовая точка UTF-32 вне диапазона суррогатов верхней/нижней границы (от 0xD800 до 0xDFFF). В противном случае будет выдана ошибка. |
CHAR CHARACTER SET UTF8
Функция UNICODE_CHAR возвращает UNICODE символ для заданной кодовой точки.
UNICODE_CHARUNICODE_CHARselect unicode_char(x) from y;
UNICODE_VAL()DSQL, PSQL
UNICODE_VAL (string)
| Параметр | Описание |
|---|---|
string |
Строка. |
INTEGER
Функция UNICODE_VAL возвращает UTF-32 кодовую точку для первого символа в строке. Возвращает 0 для пустой строки.
UNICODE_VALUNICODE_VALselect unicode_val(x) from y;
UPPER()DSQL, PSQL
UPPER (str)
| Параметр | Описание |
|---|---|
str |
Выражение строкового типа. |
[VAR]CHAR или BLOB
Функция UPPER возвращает входную строку в верхнем регистре.Точный результат зависит от набора символов входной строки.Например, для наборов символов NONE и ASCII только ASCII символы переводятся в верхний регистр; для OCTETS — вся входная строка возвращается без изменений.
UPPERUPPERselect 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
BASE64_DECODE()DSQL, PSQL
BASE64_DECODE (base64_data)
| Параметр | Описание |
|---|---|
base64_data |
Данные в кодировке Base64, дополненные знаком |
BLOB или VARBINARY
BASE64_DECODE декодирует строку с данными закодированными алгоритмом base64и возвращает декодированное значение как VARBINARY или BLOB в зависимости от входного аргумента.
Если длина типа base64_data не кратна 4, то во время подготовки возникает ошибка.Если длина значения base64_data не кратна 4, то во время выполнения возникает ошибка.
Когда входной аргумент не является BLOB, то длина результирующего типа вычисляется какtype_length * 3/4, где type_length — максимальная длина в байтах типа входного аргумента.
BASE64_DECODEBASE64_DECODEselect cast(base64_decode('VGVzdCBiYXNlNjQ=') as varchar(12))
from rdb$database;
CAST ============ Test base64
BASE64_ENCODE()DSQL, PSQL
BASE64_ENCODE (binary_data)
| Параметр | Описание |
|---|---|
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_ENCODEBASE64_ENCODEselect base64_encode('Test base64')
from rdb$database;
BASE64_ENCODE ================ VGVzdCBiYXNlNjQ=
BIT_LENGTH()DSQL, PSQL
BIT_LENGTH (string)
| Параметр | Описание |
|---|---|
string |
Выражение строкового типа. |
BIGINT
Функция BIT_LENGTH возвращает длину входной строки в битах.Для многобайтных наборов символов результат может быть в 8 раз больше, чем количество символов в “формальном” числе байт на символ, записанном в RDB$CHARACTER_SETS.
С параметрами типа CHAR эта функция берет во внимание всю формальную строковую длину (например, объявленная длина поля или переменной). Если вы хотите получить “логическую” длину в битах, не считая пробелов, то перед передачей аргумента в BIT_LENGTH надо выполнить над ним операцию RIGHT TRIM.