SQRT()
DSQL, PSQL
SQRT (number)
Параметр | Описание |
---|---|
number |
Выражение числового типа. |
DOUBLE PRECISION
Функция SQRT
возвращает квадратный корень аргумента.
Функции для работы с контекстными переменными
Функции для работы со строками
Функции для работы с датой и временем
Функции для работы с типом BLOB
Функции для работы с типом DECFLOAT
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
|
Функция всегда увеличивает отрицательные числа, поскольку она обрезает дробную часть. |
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)
Параметр | Описание |
---|---|
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 — вся входная строка возвращается без изменений.
LOWER
LOWER
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
|
При использовании |
LPAD
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'
OCTET_LENGTH()
DSQL, PSQL
OCTET_LENGTH (string)
Параметр | Описание |
---|---|
string |
Выражение строкового типа. |
BIGINT
Функция OCTET_LENGTH
возвращает количество байт занимаемое строкой.
При работе с параметрами типа CHAR
функция возвращает значение всей формальной строковой длины.Для того чтобы узнать “логическую” длину строки в байтах, то перед передачей аргумента функции следует применить RIGHT TRIM.
Note
|
Следует помнить, что не во всех наборах символов количество байт занимаемых строкой равно количеству символов. |
OCTET_LENGTH
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])
Параметр | Описание |
---|---|
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
|
При использовании |
OVERLAY
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])
Параметр | Описание |
---|---|
substr |
Подстрока, позиция которой ищется. |
string |
Строка, в которой ищется позиция. |
startpos |
Позиция, с которой начинается поиск подстроки. |
INTEGER
Функция POSITION
возвращает позицию первого вхождения подстроки в строку.Отсчёт начинается с 1.Третий аргумент (опциональный) задаёт позицию в строке, с которой начинается поиск подстроки, тем самым игнорирую любые вхождения подстроки в строку до этой позиции.Если совпадение не найдено, функция возвращает 0.
Особенности использования:
Опциональный третий параметр поддерживается только вторым вариантом синтаксиса (синтаксис с запятой);
Пустую строку, функция считает подстрокой любой строки. Поэтому при входном параметре substr, равном ''
(пустая строка), и при параметре string, отличном от NULL
, результатом будет:
1, если параметр startpos не задан;
startpos, если startpos не превышает длину параметра string;
0, если startpos больше длины параметра string.
POSITION
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)
Параметр | Описание |
---|---|
str |
Строка, в которой делается замена. |
find |
Строка, которая ищется. |
repl |
Строка, на которую происходит замена. |
VARCHAR
или BLOB
Функция REPLACE
заменяет в строке все вхождения одной строки на другую строку.
Особенности использования:
Функция поддерживает текстовые блоки любой длины и с любыми наборами символов;
Если один из аргументов имеет тип BLOB
, то результат будет иметь тип BLOB
. В противном случае результат будет иметь тип VARCHAR(N)
, где N рассчитывается из длин str, find и repl таким образом, что даже максимальное количество замен не будет вызывать переполнения поля.
Если параметр find является пустой строкой, то возвращается str без изменений;
Если параметр repl является пустой строкой, то все вхождения find удаляются из строки str;
Если любой из аргументов равен NULL
, то результатом всегда будет NULL
, даже если не было произведено ни одной замены.
Warning
|
При использовании |
REPLACE
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'
REVERSE()
DSQL, PSQL
REVERSE (string)
Параметр | Описание |
---|---|
string |
Выражение строкового типа. |
VARCHAR
Функция REVERSE
возвратит строку перевёрнутую "задом наперёд".
REVERSE
REVERSE
REVERSE ('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
|
При использовании |
RIGHT
SELECT 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
|
При использовании |
RPAD
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'
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.
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.То есть полный шаблон эквивалентен Возвращаемое значение соответствует части 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
|
При использовании |
TRIM
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)
Параметр | Описание |
---|---|
number |
Допустимая кодовая точка UTF-32 вне диапазона суррогатов верхней/нижней границы (от 0xD800 до 0xDFFF). В противном случае будет выдана ошибка. |
CHAR CHARACTER SET UTF8
Функция UNICODE_CHAR
возвращает UNICODE символ для заданной кодовой точки.
UNICODE_CHAR
UNICODE_CHAR
select unicode_char(x) from y;
UNICODE_VAL()
DSQL, PSQL
UNICODE_VAL (string)
Параметр | Описание |
---|---|
string |
Строка. |
INTEGER
Функция UNICODE_VAL
возвращает UTF-32 кодовую точку для первого символа в строке. Возвращает 0 для пустой строки.
UNICODE_VAL
UNICODE_VAL
select unicode_val(x) from y;
UPPER()
DSQL, PSQL
UPPER (str)
Параметр | Описание |
---|---|
str |
Выражение строкового типа. |
[VAR]CHAR
или BLOB
Функция UPPER
возвращает входную строку в верхнем регистре.Точный результат зависит от набора символов входной строки.Например, для наборов символов NONE и ASCII только ASCII символы переводятся в верхний регистр; для OCTETS — вся входная строка возвращается без изменений.
UPPER
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
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_DECODE
BASE64_DECODE
select 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_ENCODE
BASE64_ENCODE
select 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.
BIT_LENGTH
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-битные
CHAR_LENGTH()
, CHARACTER_LENGTH()
DSQL, PSQL
CHAR_LENGTH (string) | CHARACTER_LENGTH (string)
Параметр | Описание |
---|---|
string |
Выражение строкового типа. |
BIGINT
Функция CHAR_LENGTH
возвращает длину (в символах) строки, переданной в качестве аргумента.
Note
|
С параметрами типа |
HASH()
DSQL, PSQL
HASH (str [USING <algorithm>]) <algorithm> ::= { CRC32 }
Параметр | Описание |
---|---|
str |
Выражение строкового типа. |
BIGINT
Функция HASH
возвращает некриптографический хэш входной строки.Эта функция полностью поддерживает текстовые BLOB
любой длины и с любым набором символов.
Необязательное предложение USING
определяет применяемый некриптографический алгоритм хеширования.Когда предложение USING
отсутствует, применяется устаревший алгоритм PJW; это идентично его поведению в предыдущихверсиях Firebird.
Если алгоритм не указан, то используется 64-битный вариант некриптографическойхэш-функции PJW (также известной как ELF64).Эта функция очень быстра и может использоваться для общих целей (хеш-таблицы и т.д.), но имеет большое количество коллизий.Для более надежного хеширования следует использовать другие хеш-функции, явно указанные в предложении USING, или криптографические хеши с помощью [fblangref-scalarfuncs-crypthash].
Для этого алгоритма хеширования функция возвращает тип BIGINT
.
CRC32
Если в предложении USING
указан алгоритм CRC32
, то Firebird применяет алгоритм CRC32, используя полином 0x04C11DB7.
Для этого алгоритма функция HASH
возвращает результат с типом INTEGER
.
HASH
SELECT HASH(x) FROM MyTable;
-- результат типа BIGINT
SELECT HASH(x USING CRC32) FROM MyTable;
-- результат типа INTEGER
См. также:[fblangref-scalarfuncs-crypthash]
HEX_DECODE()
DSQL, PSQL
HEX_DECODE (hex_data)
Параметр | Описание |
---|---|
hex_data |
Данные в шестнадцатеричном представлении. |
VARBINARY
или BLOB
Функция HEX_DECODE
декодирует строку с шестнадцатеричными данными и возвращает декодированное значениекак VARBINARY
или BLOB
в зависимости от типа входного и размера аргумента.Если длина типа hex_data не кратна 2, во время подготовки возникает ошибка.Если длина значения hex_data не кратна 2, во время выполнения возникает ошибка.
Когда входной аргумент не является BLOB
, то длина результирующего типа вычисляется как type_length / 2
,где type_length — максимальная длина в байтах типа входного аргумента.
HEX_DECODE
HEX_DECODE
select cast(hex_decode('48657861646563696D616C') as varchar(12))
from rdb$database;
CAST ============ Hexadecimal
HEX_ENCODE()
DSQL, PSQL
HEX_ENCODE (binary_data)
Параметр | Описание |
---|---|
binary_data |
Двоичные данные для кодирования |
VARCHAR CHARACTER SET ASCII
или BLOB SUB_TYPE TEXT CHARACTER SET ASCII
Функция HEX_ENCODE
кодирует binary_data шестнадцатеричным числом и возвращает закодированное значениекак VARCHAR CHARACTER SET ASCII
или BLOB SUB_TYPE TEXT CHARACTER SET ASCII
в зависимости от входного аргумента.
Когда входной аргумент не является BLOB
, то длина результирующего типа вычисляется как type_length * 2
,где type_length — максимальная длина в байтах типа входного аргумента.
HEX_ENCODE
HEX_ENCODE
select hex_encode('Hexadecimal')
from rdb$database;
HEX_ENCODE ====================== 48657861646563696D616C
DATEADD()
DSQL, PSQL
DATEADD (<args>) <args> ::= <amount> <unit> TO <datetime> | <unit>, <amount>, <datetime> <unit> ::= YEAR | MONTH | WEEK | DAY | WEEKDAY | YEARDAY | HOUR | MINUTE | SECOND | MILLISECOND
Параметр | Описание |
---|---|
amount |
Выражение типа |
unit |
Составляющая даты/времени. |
datetime |
Выражение типа |
DATE
, TIME
или TIMESTAMP
.
Функция DATEADD
позволяет добавить заданное число лет, месяцев, недель, часов, минут, секунд, миллисекунд к заданному значению даты/времени.
Note
|
|
DATEADD
DATEADD
DATEADD (28 DAY TO CURRENT_DATE)
DATEADD (-6 HOUR TO CURRENT_TIME)
DATEADD (MONTH, 9, DATEOFCONCEPTION)
DATEADD (-38 WEEK TO DATEOFBIRTH)
DATEADD (MINUTE, 90, CAST('NOW' AS TIME))
DATEADD (? YEAR TO DATE '11-SEP-1973')
SELECT
CAST(DATEADD(-1 * EXTRACT(MILLISECOND FROM ts) MILLISECOND TO ts) AS VARCHAR(30)) AS t,
EXTRACT(MILLISECOND FROM ts) AS ms
FROM (
SELECT TIMESTAMP'2014-06-09 13:50:17.4971' as ts
FROM RDB$DATABASE
) a
T MS ------------------------------------ 2014-06-09 13:50:17.0000 497.1
DATEDIFF()
DSQL, PSQL
DATEDIFF (<args>) <args> ::= <unit> FROM <moment_1> TO <moment_2> | <unit>, <moment_1>, <moment_2> <unit> ::= YEAR | MONTH | WEEK | DAY | WEEKDAY | YEARDAY | HOUR | MINUTE | SECOND | MILLISECOND
Параметр | Описание |
---|---|
unit |
Составляющая даты/времени. |
monent_1 |
Выражение типа |
monent_2 |
Выражение типа |
BIGINT
Функция DATEDIFF
возвращает количество лет, месяцев, недель, дней, часов, минут, секунд или миллисекунд между двумя значениями даты/времени.
Особенности использования:
Параметры DATE
и TIMESTAMP
могут использоваться совместно. Совместное использование типа TIME
с типами DATE
и TIMESTAMP
не разрешается;
С аргументом типа TIMESTAMP
и DATE
можно использовать любую составляющую даты/времени <unit>;
Для типа данных TIME разрешается использовать только HOUR
, MINUTE
, SECOND
и MILLISECOND
.
Note
|
|
DATEDIFF
DATEDIFF
DATEDIFF (HOUR FROM CURRENT_TIMESTAMP TO TIMESTAMP '12-JUN-2059 06:00')
DATEDIFF (MINUTE FROM TIME '0:00' TO CURRENT_TIME)
DATEDIFF (MONTH, CURRENT_DATE, DATE '1-1-1900')
DATEDIFF (DAY FROM CURRENT_DATE TO CAST (? AS DATE))
EXTRACT()
DSQL, PSQL
EXTRACT (<part> FROM <datetime>) <part> ::= YEAR | QUARTER | MONTH | WEEK | DAY | WEEKDAY | YEARDAY | HOUR | MINUTE | SECOND | MILLISECOND | TIMEZONE_HOUR | TIMEZONE_MINUTE
Параметр | Описание |
---|---|
part |
Составляющая даты/времени. |
datetime |
Выражение типа |
SMALLINT
или NUNERIC
Функция EXTRACT
извлекает составляющие даты и времени из типов данных DATE
, TIME
и TIMESTAMP
.
Составляющая даты/времени | Тип | Диапазон | Комментарий |
---|---|---|---|
|
|
1–9999 |
Год |
|
|
1-4 |
Квартал |
|
|
1–12 |
Месяц |
|
|
1–53 |
Номер недели в году |
|
|
1–31 |
День |
|
|
0–6 |
День недели. 0 — Воскресенье |
|
|
0–365 |
Номер дня в году. 0 = 1 января |
|
|
0–23 |
Часы |
|
|
0–59 |
Минуты |
|
|
0.0000–59.9999 |
Секунды. Включает в себя миллисекунды |
|
|
0.0–999.9 |
Миллисекунды |
|
|
от -14 до +14 |
Смещение часов часового пояса |
|
|
от -59 до +59 |
Смещение минут часового пояса |
Note
|
Если составляющая даты/времени не присутствует в аргументе дата/время, например SECOND в аргументе с типом DATE или YEAR в TIME, то функция вызовет ошибку. |
Из аргумента с типом данных DATE
или TIMESTAMP
можно извлекать номер недели.В соответствии со стандартом ISO-8601 неделя начинается с понедельника и всегда включает в себя 7 дней.Первой неделей года является первая неделя, у которой в ней больше дней в новом году (по крайней мере, 4): дни 1-3 могут принадлежать предыдущей неделе (52 или 53) прошлого года.По аналогии дни 1-3 текущего года могут принадлежать 1 неделе следующего года.
EXTRACT
/* получить по дате номер квартала */
SELECT (EXTRACT(MONTH FROM CURRENT_TIMESTAMP)-1)/3+1
FROM RDB$DATABASE
FIRST_DAY()
DSQL, PSQL
FIRST_DAY(OF <period> FROM date_or_timestamp) <period> ::= YEAR | QUARTER | MONTH | WEEK
Параметр | Описание |
---|---|
date_or_timestamp |
Выражение типа |
DATE
или TIMESTAMP [WITH | WITHOUT] TIME ZONE
Возвращает первый день года, месяца или недели для заданной даты.
Note
|
|
FIRST_DAY
FIRST_DAY
SELECT FIRST_DAY(OF MONTH FROM current_date) FROM rdb$database;
SELECT FIRST_DAY(OF YEAR FROM current_timestamp) FROM rdb$database;
SELECT FIRST_DAY(OF WEEK FROM date '2017-11-01') FROM rdb$database;
LAST_DAY()
DSQL, PSQL
LAST_DAY(OF <period> FROM date_or_timestamp) <period> ::= YEAR | QUARTER | MONTH | WEEK
Параметр | Описание |
---|---|
date_or_timestamp |
Выражение типа |
DATE
или TIMESTAMP [WITH | WITHOUT] TIME ZONE
Возвращает последний день года, месяца или недели для заданной даты.
Note
|
|
LAST_DAY
LAST_DAY
SELECT LAST_DAY(OF MONTH FROM current_date) FROM rdb$database;
SELECT LAST_DAY(OF YEAR FROM current_timestamp) FROM rdb$database;
SELECT LAST_DAY(OF WEEK FROM date '2017-11-01') FROM rdb$database;
BLOB_APPEND()
DSQL, PSQL
BLOB_APPEND(<blob> [, <value1>, ... <valueN]>
Параметр | Описание |
---|---|
blob |
BLOB или NULL. |
value |
Значение любого типа. |
временный не закрытый BLOB с флагом BLB_close_on_read
.
Функция BLOB_APPEND
предназначена для конкатенации BLOB без созданияпромежуточных BLOB. Обычная операция конкатенации с аргументами типа BLOB всегда создаст столько временных BLOB,сколько раз используется.
Входные аргументы:
Для первого аргумента в зависимости от его значения определено следующее поведение функции:
NULL: будет создан новый пустой не закрытый BLOB
постоянный BLOB (из таблицы) или временный уже закрытый BLOB:будет создан новый пустой не закрытый BLOB и содержимоепервого BLOB будет в него добавлено
временный не закрытый BLOB: он будет использован далее
другие типы данных преобразуются в строку, будет создан временный не закрытый BLOB с содержимым этой строки
остальные аргументы могут быть любого типа. Для них определено следующее поведение:
NULL игнорируется
не BLOB преобразуются в строки (по обычным правилам) и добавляются к содержимомурезультата
BLOB при необходимости транслитерируются к набору символов первого аргумента и ихсодержимое добавляется к результату
В качестве выходного значения функция BLOB_APPEND
возвращает временный не закрытый BLOB с флагом BLB_close_on_read
.Это или новый BLOB, или тот же, что был в первом аргументе. Таким образом ряд операций видаblob = BLOB_APPEND(blob, …)
приведёт к созданию не более одного BLOB (если не пытаться добавить BLOB к самому себе).Этот BLOB будет автоматически закрыт движком при попытке прочитать его клиентом, записать в таблицу или использовать в других выражениях, требующих чтения содержимого.
Note
|
Проверка BLOB на значение NULL с помощью оператора |
execute block
returns (b blob sub_type text)
as
begin
-- создаст новый временный не закрытый BLOB
-- и запишет в него строку из 2-ого аргумента
b = blob_append(null, 'Hello ');
-- добавляет во временный BLOB две строки не закрывая его
b = blob_append(b, 'World', '!');
-- сравнение BLOB со строкой закроет его, ибо для этого надо прочитать BLOB
if (b = 'Hello World!') then
begin
-- ...
end
-- создаст временный закрытый BLOB добавив в него строку
b = b || 'Close';
suspend;
end
Tip
|
Используйте функции |
BLOB_APPEND
Предположим вам надо собрать JSON на стороне сервера. У нас есть PSQL пакет JSON_UTILS с набором функций дляпреобразования элементарных типов данных в JSON нотацию. Тогда сборка JSON с использованием функции BLOB_APPEND
будет выглядетьследующим образом:
EXECUTE BLOCK
RETURNS (
JSON_STR BLOB SUB_TYPE TEXT CHARACTER SET UTF8)
AS
DECLARE JSON_M BLOB SUB_TYPE TEXT CHARACTER SET UTF8;
BEGIN
FOR
SELECT
HORSE.CODE_HORSE,
HORSE.NAME,
HORSE.BIRTHDAY
FROM HORSE
WHERE HORSE.CODE_DEPARTURE = 15
FETCH FIRST 1000 ROW ONLY
AS CURSOR C
DO
BEGIN
SELECT
LIST(
'{' ||
JSON_UTILS.NUMERIC_PAIR('age', MEASURE.AGE) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('height', MEASURE.HEIGHT_HORSE) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('length', MEASURE.LENGTH_HORSE) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('chestaround', MEASURE.CHESTAROUND) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('wristaround', MEASURE.WRISTAROUND) ||
',' ||
JSON_UTILS.NUMERIC_PAIR('weight', MEASURE.WEIGHT_HORSE) ||
'}'
) AS JSON_M
FROM MEASURE
WHERE MEASURE.CODE_HORSE = :C.CODE_HORSE
INTO JSON_M;
JSON_STR = BLOB_APPEND(
JSON_STR,
IIF(JSON_STR IS NULL, '[', ',' || ascii_char(13)),
'{',
JSON_UTILS.INTEGER_PAIR('code_horse', C.CODE_HORSE),
',',
JSON_UTILS.STRING_PAIR('name', C.NAME),
',',
JSON_UTILS.TIMESTAMP_PAIR('birthday', C.BIRTHDAY),
',',
JSON_UTILS.STRING_VALUE('measures') || ':[', JSON_M, ']',
'}'
);
END
JSON_STR = BLOB_APPEND(JSON_STR, ']');
SUSPEND;
END
Аналогичный пример с использованием обычного оператора конкатенации ||
работает в 18 раз медленнее, и делает в 1000 раз больше операций записи на диск.
COMPARE_DECFLOAT()
DSQL, PSQL
COMPARE_DECFLOAT (decfloat1, decfloat2)
Параметр | Описание |
---|---|
decfloat1, decfloat2 |
Значения или выражения типа |
SMALLINT
Функция COMPARE_DECFLOAT
сравнивает два значения типа DECFLOAT
, которые могут быть одинаковыми, разными или неупорядоченными.Замыкающие нули учитываются при сравнении.
Функция возвращает:
0
|
Значения равны; |
1
|
Первое значение меньше чем второе; |
2
|
Первое значение больше чем второе; |
3
|
Значения не упорядочены (одно или оба |
В отличие от операторов сравнения (‘<
’, ‘=
’, ‘>
’ и др.) сравнение является точным,т.е. COMPARE_DECFLOAT(2.17, 2.170)
вернёт 2
, а не 0
.
См. также:[fblangref-scalarfuncs-totalorder]
NORMALIZE_DECFLOAT()
DSQL, PSQL
NORMALIZE_DECFLOAT (decfloat_value)
Параметр | Описание |
---|---|
decfloat_value |
Значение или выражение типа |
DECFLOAT
Функция NORMALIZE_DECFLOAT
возвращает число в нормализованном виде.Это обозначает, что для любого ненулевого значения удаляются завершающие нули с соответствующей коррекцией экспоненты.
NORMALIZE_DECFLOAT
DECFLOAT
NORMALIZE_DECFLOAT(12.00) -- возвращает 12
NORMALIZE_DECFLOAT(120) -- возвращает 1.2E+2
QUANTIZE()
DSQL, PSQL
QUANTIZE (decfloat_value, exp_value)
Параметр | Описание |
---|---|
decfloat_value |
Значение или выражение типа |
exp_value |
Значение или выражение для использования в качестве показателя степени;должно иметь тип |
DECFLOAT
Функция QUANTIZE
возвращает значение первого аргумента масштабированным с использованием второго значения в качестве шаблона.Другими словами функция QUANTIZE
возвращает значение DECFLOAT
, равное по значению (за исключением любого округления) и знаку decfloat_value, а также экспоненте, равной по значению экспоненте exp_value.Функцию QUANTIZE
можно использовать для реализации округления с точностью до нужного знака, например, округление до ближайшего цента с использованием установленного режима округления DECFLOAT
.
Тип возвращаемого значения — DECFLOAT(16)
, если оба аргумента — DECFLOAT(16)
, в противном случае тип результата — DECFLOAT(34)
.
Note
|
Целевой показатель — это показатель, используемый в формате хранения |
Если показатель decfloat_value больше, чем показатель exp_value, коэффициент decfloat_value умножается на степень десяти, и его показатель уменьшается, если показатель меньше, то его коэффициент округляется с использованием текущего режима округления decfloat, и его показатель увеличивается.
Когда невозможно достичь целевого показателя экспоненты, поскольку коэффициент превысит целевую точность (16 или 34 десятичных знака), то либо возникает ошибка “Decfloat float invalid operation”, либо возвращается NaN
(в зависимости от текущего конфигурация decfloat traps).
Ограничений на exp_value практически нет.Однако почти во всех случаях использования NaN
/sNaN
/Infinity
будет вызывать исключение(если это не разрешено текущей конфигурацией decfloat traps)
Если одно из значений NULL
, то результатом функции будет NULL
и т.д.
QUANTIZE
select v, pic, quantize(v, pic) from examples;
V PIC QUANTIZE ======================= ===================== ================== 3.16 0.001 3.160 3.16 0.01 3.16 3.16 0.1 3.2 3.16 1 3 3.16 1E+1 0E+1 -0.1 1 -0 0 1E+5 0E+5 316 0.1 316.0 316 1 316 316 1E+1 3.2E+2 316 1E+2 3E+2
TOTALORDER()
DSQL, PSQL
TOTALORDER (decfloat1, decfloat2)
Параметр | Описание |
---|---|
decfloat1, decfloat2 |
Значение или выражение типа |
SMALLINT
Функция TOTALORDER
сравнивает два значения типа DECFLOAT
, включая специальные значения.Сравнение является точным. Замыкающие нули учитываются при сравнении.
Функция возвращает:
-1 — если первое значение меньше второго;
0 — если значения равны;
1 — если первое значение больше второго.
Сравнений значений DEFLOAT
происходит в следующем порядке:
-nan < -snan < -inf < -0.1 < -0.10 < -0 < 0 < 0.10 < 0.1 < inf < snan < nan
См. также:[fblangref-scalarfuncs-comparedecfloat]
В Firebird 4.0 поддерживается только подмножество симметричных алгоритмов шифрования (как блочных так и потоковых), так и RSA.
CRYPT_HASH()
DSQL, PSQL
CRYPT_HASH (value USING <algorithm>) <algorithm> ::= { MD5 | SHA1 | SHA256 | SHA512 | SHA3_224 | SHA3_256 | SHA3_384 | SHA3_512 }
Параметр | Описание |
---|---|
value |
Выражение любого типа. Не строковые и не бинарные типы приводятся к строке. |
algorithm |
Алгоритм хеширования. |
VARBINARY
Функция CRYPT_HASH
возвращает криптографический хэш входной строки, используя указанный алгоритм.Эта функция полностью поддерживает текстовые BLOB
любой длины и с любым набором символов.Предложение USING
позволяет указать алгоритм по которому вычисляет хэш.
Note
|
Алгоритмы |
CRYPT_HASH
CRYPT_HASH
SELECT CRYPT_HASH(x USING SHA256) FROM MyTable;
-- результат типа VARBINARY
DECRYPT()
DSQL, PSQL
DECRYPT (encrypted_input [USING <algorithm>] [MODE <mode>] KEY key [IV iv] [<ctr_type>] [CTR_LENGTH ctr_length] [COUNTER initial_counter] ) <algorithm> ::= <block_cipher> | <stream_cipher> <block_cipher> ::= AES | ANUBIS | BLOWFISH | KHAZAD | RC5 | RC6 | SAFER+ | TWOFISH | XTEA <stream_cipher> ::= CHACHA20 | RC4 | SOBER128 <mode> ::= CBC | CFB | CTR | ECB | OFB <ctr_type> ::= CTR_BIG_ENDIAN | CTR_LITTLE_ENDIAN
Параметр | Описание |
---|---|
encrypted_input |
Зашифрованный BLOB или (двоичная) строка |
algorithm |
Алгоритм шифрования.Поддерживаются как блочные, так и потоковые алгоритмы. |
mode |
Режим шифрования.Обязателен для блочных алгоритмов шифрования. |
key |
Ключ шифрования. |
iv |
Вектор инициализации (IV). Должен быть указан для всех блочных алгоритмов шифрования за исключением |
ctr_type |
Порядок байтов счётчика.Может быть указан только в режиме |
ctr_length |
Длина счётчика в байтах.Может быть указана только в режиме |
initial_counter |
Начальное значение счётчика.Может быть указана только для алгоритма |
BLOB
или VARBINARY
.
Функция DECRYPT
дешифрует данные с использованием симметричного шифра.Размеры строк передаваемых в эту функцию должны соответствовать требованиям выбранного алгоритма и режима.
DECRYPT
select decrypt(x'0154090759DF' using sober128 key 'AbcdAbcdAbcdAbcd'
iv '01234567')
from rdb$database;
select decrypt(secret_field using aes mode ofb key '0123456701234567'
iv init_vector)
from secure_table;
ENCRYPT()
DSQL, PSQL
ENCRYPT (input [USING <algorithm>] [MODE <mode>] KEY key [IV iv] [<ctr_type>] [CTR_LENGTH ctr_length] [COUNTER initial_counter] ) <algorithm> ::= <block_cipher> | <stream_cipher> <block_cipher> ::= AES | ANUBIS | BLOWFISH | KHAZAD | RC5 | RC6 | SAFER+ | TWOFISH | XTEA <stream_cipher> ::= CHACHA20 | RC4 | SOBER128 <mode> ::= CBC | CFB | CTR | ECB | OFB <ctr_type> ::= CTR_BIG_ENDIAN | CTR_LITTLE_ENDIAN
Параметр | Описание |
---|---|
input |
Выражение строкового типа или |
algorithm |
Алгоритм шифрования.Поддерживаются как блочные, так и потоковые алгоритмы. |
mode |
Режим шифрования.Обязателен для блочных алгоритмов шифрования. |
key |
Ключ шифрования. |
iv |
Вектор инициализации (IV). Должен быть указан для всех блочных алгоритмов шифрования за исключением |
ctr_type |
Порядок байтов счётчика.Может быть указан только в режиме |
ctr_length |
Длина счётчика в байтах.Может быть указана только в режиме |
initial_counter |
Начальное значение счётчика.Может быть указана только для алгоритма |
BLOB
или VARBINARY
Функция ENCRYPT
шифрует данные с использованием симметричного шифра.
Note
|
|
Особенности различных алгоритмов и режимов выходят за рамки данного справочника по языку.
Алгоритм | Размер ключа (байт) | Размер блока (байт) | Примечание |
---|---|---|---|
Блочное шифрование |
|||
|
16, 24, 32 |
16 |
|
|
16 - 40, с шагом 4 |
16 |
|
|
8 - 56 |
8 |
|
|
16 |
8 |
|
|
8 - 128 |
8 |
|
|
8 - 128 |
16 |
|
|
16, 24, 32 |
16 |
|
|
16, 24, 32 |
16 |
|
|
16 |
8 |
|
Поточное шифрование |
|||
|
16, 32 |
1 |
Размер (IV) составляет 8 или 12 байт.Для размера 8 initial_counter - это 64-битное целое число, для размера 12 - 32-битное. |
|
5 - 256 |
1 |
|
|
4x |
1 |
Размер (IV) составляет 4y байт, длина не зависит от размера ключа. |
ENCRYPT
select encrypt('897897' using sober128 key 'AbcdAbcdAbcdAbcd' iv '01234567')
from rdb$database;
RSA_PRIVATE()
DSQL, PSQL
RSA_PRIVATE (size)
Параметр | Описание |
---|---|
size |
Размер ключа в байтах. |
VARBINARY
Функция RSA_PRIVATE
возвращает RSA закрытый ключ заданной длины (в байтах) в PKCS#1 формате как строку VARBINARY
.
RSA_PRIVATE
select rdb$set_context('USER_SESSION', 'private_key', rsa_private(256))
from rdb$database;
RSA_PUBLIC()
DSQL, PSQL
RSA_PUBLIC (private-key)
Параметр | Описание |
---|---|
private-key |
RSA закрытый ключ. |
VARBINARY
Функция RSA_PUBLIC
возвращает RSA открытый ключ для заданного RSA закрытого ключа.Оба ключа должны быть в PKCS#1 формате.
RSA_PUBLIC
Закрытый ключ должен быть инициализирован ранее см.пример в RSA_PRIVATE
select rdb$set_context('USER_SESSION', 'public_key',
rsa_public(rdb$get_context('USER_SESSION', 'private_key')))
from rdb$database;
RSA_ENCRYPT()
DSQL, PSQL
RSA_ENCRYPT (<data> KEY <public_key> [LPARAM <tag>] [HASH <hash>]) <hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Параметр | Описание |
---|---|
data |
Данные (строка или BLOB) для шифрования. |
public_key |
Открытый RSA ключ, который возвращает функция |
tag |
Дополнительный системный тег, который можно применять для определения того, какая система закодировала сообщение.Значением по умолчанию является |
hash |
Алгоритм хеширования.По умолчанию SHA256. |
VARBINARY
Заполняет данные, используя заполнение OAEP, и шифрует их, используя открытый ключ RSA.Обычно используется для шифрования коротких симметричных ключей, которые затем используются в блочных шифрах для шифрования сообщения.
RSA_ENCRYPT
Открытый ключ должен быть инициализирован ранее см.пример в [fblangref-scalarfuncs-rsa_public]
select rdb$set_context('USER_SESSION', 'msg',
rsa_encrypt('Some message' key rdb$get_context('USER_SESSION', 'public_key')))
from rdb$database;
RSA_DECRYPT()
DSQL, PSQL
RSA_DECRYPT (<data> KEY <private_key> [LPARAM <tag>] [HASH <hash>]) <hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Параметр | Описание |
---|---|
data |
Данные (строка или BLOB) для дешифрования. |
private_key |
Закрытый RSA ключ, который возвращает функция |
tag |
Дополнительный системный тег.Должно быть тем же самым значением, которое передавалось |
hash |
Алгоритм хеширования.По умолчанию SHA256. |
VARCHAR
Расшифровывает с использованием закрытого ключа RSA, и удаляет OAEP дополненные данные.
Закрытый ключ должен быть инициализирован ранее см. пример в [fblangref-scalarfuncs-rsa_private].Данные для расшифровки используются из примера в [fblangref-scalarfuncs-rsa_encrypt].
select RSA_DECRYPT(rdb$get_context('USER_SESSION', 'msg')
key rdb$get_context('USER_SESSION', 'private_key'))
from RDB$DATABASE;
RSA_SIGN_HASH()
DSQL, PSQL
RSA_SIGN_HASH (<data> KEY <private_key> [HASH <hash>] [SALT_LENGTH <length>]) <hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Параметр | Описание |
---|---|
data |
Данные (строка или BLOB) для кодирования. |
private_key |
Закрытый RSA ключ, который возвращает функция |
hash |
Алгоритм хеширования.По умолчанию SHA256. |
length |
Указывает на длину желаемой соли и, как правило, должен быть небольшим.Хорошее значение от 8 до 16. |
VARBINARY
Выполняет PSS-кодирование дайджеста сообщения для подписи и подписывает его с использованием закрытого ключа RSA.Возвращает подпись сообщения.
RSA_SIGN_HASH
Закрытый ключ должен быть инициализирован ранее см.пример в [fblangref-scalarfuncs-rsa_private].
select rdb$set_context('USER_SESSION', 'msg',
rsa_sign_hash(crypt_hash('Test message' using sha256)
key rdb$get_context('USER_SESSION', 'private_key')))
from rdb$database;
RSA_VERIFY_HASH()
DSQL, PSQL
RSA_VERIFY_HASH (<data> SIGNATURE <signature> KEY <public_key> [HASH <hash>] [SALT_LENGTH <length>]) <hash> ::= { MD5 | SHA1 | SHA256 | SHA512 }
Параметр | Описание |
---|---|
data |
Данные (строка или BLOB) для кодирования. |
signature |
Подпись.Должно быть значением возвращаемым функцией |
public_key |
Открытый RSA ключ, который возвращает функция |
hash |
Алгоритм хеширования.По умолчанию SHA256. |
length |
Указывает на длину желаемой соли и, как правило, должен быть небольшим.Хорошее значение от 8 до 16. |
BOOLEAN
Выполняет PSS-кодирование дайджеста сообщения для подписи и проверяет его цифровую подпись, используя открытый ключ RSA.Возвращает результат проверки подписи.
RSA_VERIFY_HASH
Открытый ключ должен быть инициализирован ранее см. пример в [fblangref-scalarfuncs-rsa_public].Цифровая подпись получена ранее с помощью функции [fblangref-scalarfuncs-rsa_sign_hash].
select rsa_verify_hash(crypt_hash('Test message' using sha256)
signature rdb$get_context('USER_SESSION', 'msg')
key rdb$get_context('USER_SESSION', 'public_key'))
from rdb$database;
CAST()
DSQL, PSQL
CAST(value | NULL AS <type>) <type> ::= <datatype> | [TYPE OF] domain | TYPE OF COLUMN relname.colname <datatype> ::= <scalar_datatype> | <blob_datatype> | <array_datatype> <scalar_datatype> ::= См. Синтаксис скалярных типов данных <blob_datatype> ::= См. Синтаксис типа данных BLOB <array_datatype> ::= См. Синтаксис массивов
Параметр | Описание |
---|---|
value |
SQL выражение. |
datatype |
Тип данных SQL. |
domain |
Домен. |
relname |
Имя таблицы или представления. |
colname |
Имя столбца таблицы или представления. |
<type>
.
Функция CAST служит для явного преобразования данных из одного типа данных в другой тип данных или домен.Если это невозможно будет выдана ошибка.
Из типа | В тип |
---|---|
Числовые типы |
Числовые типы, |
|
|
|
|
|
|
|
|
Имейте в виду, что иногда информация может быть потерянна, например, когда вы преобразуете тип TIMESTAMP
к DATE
.Кроме того, тот факт, что типы совместимы для функции CAST
, ещё не гарантирует, что преобразование будет успешным.“CAST (123456789 AS SMALLINT)” безусловно приведёт к ошибке, так же как и “CAST('Judgement Day' as DATE)”.
Вы можете применить преобразование типа к параметрам оператора:
CAST (? AS INTEGER)
Это дает вам контроль над типом полей ввода.
При преобразовании к домену должны быть удовлетворены любые ограничения (NOT NULL и/или CHECK) объявленные для домена, иначе преобразование не будет выполнено.Помните, что проверка CHECK проходит, если его вычисление даёт TRUE или UNKNOWN (NULL). Для следующих операторов:
CREATE DOMAIN quint AS INT CHECK (VALUE >= 5000)
SELECT CAST (2000 AS quint) FROM rdb$database -- (1)
SELECT CAST (8000 AS quint) FROM rdb$database -- (2)
SELECT CAST (null AS quint) FROM rdb$database -- (3)
только (1) завершится с ошибкой.
При использовании модификатора TYPE OF
выражение будет преобразовано к базовому типу домена, игнорируя любые ограничения.Для домена quint, объявленного выше, оба преобразования будут эквивалентны и оба будут успешно выполнены:
SELECT CAST (2000 AS TYPE OF quint) FROM rdb$database
SELECT CAST (2000 AS INT) FROM rdb$database
При использовании TYPE OF
с [VAR]CHAR
типом, его набор символов и порядок сортировки (collate) сохраняются.
CREATE DOMAIN iso20 VARCHAR(20) CHARACTER SET iso8859_1;
CREATE DOMAIN dunl20 VARCHAR(20) CHARACTER SET iso8859_1 COLLATE du_nl;
CREATE TABLE zinnen (zin VARCHAR(20));
COMMIT;
INSERT INTO zinnen VALUES ('Deze');
INSERT INTO zinnen VALUES ('Die');
INSERT INTO zinnen VALUES ('die');
INSERT INTO zinnen VALUES ('deze');
SELECT CAST(zin AS TYPE OF iso20) FROM zinnen ORDER BY 1;
-- returns Deze -> Die -> deze -> die
SELECT CAST(zin AS TYPE OF dunl20) FROM zinnen ORDER BY 1;
-- returns deze -> Deze -> die -> Die
Warning
|
Если определение домена изменяется, то существующие преобразования к домену или его типу могут стать ошибочными.Если такие преобразования происходят в PSQL модулях, то их ошибки могут быть обнаружены.См. Поле RDB$VALID_BLR. |
Разрешено преобразовывать выражение к типу столбца существующей таблицы или представления.При этом будет использован только сам тип, для строковых типов будет использован так же набор символов, но не последовательность сортировки.Ограничения и значения по умолчанию исходного столбца не применяются.
CREATE TABLE ttt (
s VARCHAR(40) CHARACTER SET utf8 COLLATE unicode_ci_ai
);
COMMIT;
SELECT CAST ('Jag har många vänner' AS TYPE OF COLUMN ttt.s)
FROM rdb$database;
Warning
|
Если определение столбца изменяется, то существующие преобразования к его типу могут стать ошибочными.Если такие преобразования происходят в PSQL модулях, то их ошибки могут быть обнаружены.См. Поле RDB$VALID_BLR. |
SELECT CAST ('12' || '-June-' || '1959' AS DATE) FROM rdb$database
Заметьте, что в некоторых случаях вы можете не использовать синтаксис преобразования как в примере выше, так как Firebird поймёт из контекста (сравнение с полем типа DATE
) как интерпретировать строку:
UPDATE People SET AgeCat = 'Old'
WHERE BirthDate < '1-Jan-1943'
Но это не всегда возможно.Преобразование в примере ниже не может быть опущено, так как система будет пытаться преобразовать строку к числу чтобы вычесть из неё число:
SELECT CAST('TODAY' AS DATE) - 7 FROM rdb$database
BIN_AND()
DSQL, PSQL
BIN_AND (number, number [, number ...])
Параметр | Описание |
---|---|
number |
Целое число. |
SMALLINT
, INTEGER
, BIGINT
или INT128
Функция BIN_AND
возвращает результат побитовой операции AND (И) аргументов.
BIN_NOT()
DSQL, PSQL
BIN_NOT (number)
Параметр | Описание |
---|---|
number |
Целое число. |
SMALLINT
, INTEGER
, BIGINT
или INT128
Функция BIN_NOT
возвращает результат побитовой операции NOT
над аргументом.
BIN_OR()
DSQL, PSQL
BIN_OR (number, number [, number ...])
Параметр | Описание |
---|---|
number |
Целое число. |
SMALLINT
, INTEGER
, BIGINT
или INT128
Функция BIN_OR
возвращает результат побитовой операции OR (ИЛИ) аргументов.
BIN_SHL()
DSQL, PSQL
BIN_SHL (number, shift)
Параметр | Описание |
---|---|
number |
Целое число. |
shift |
Количество бит, на которое смещается значение number. |
BIGINT
или INT128
.
Функция BIN_SHL
возвращает первый параметр, побитно смещённый влево на значение второго параметра, т.е. a << b
или a·2b
.
BIN_SHR()
DSQL, PSQL
BIN_SHR (number, shift)
Параметр | Описание |
---|---|
number |
Целое число. |
shift |
Количество бит на которое смещается значение number. |
BIGINT
или INT128
.
Функция BIN_SHR
возвращает первый параметр, побитно смещённый вправо на значение второго параметра, т.е. a >> b
или a/2b
.
Выполняемая операция является арифметическим сдвигом вправо (SAR), а это означает, что знак первого операнда всегда сохраняется.
BIN_XOR()
DSQL, PSQL
BIN_XOR (number, number [, number ...])
Параметр | Описание |
---|---|
number |
Целое число. |
SMALLINT
, INTEGER
, BIGINT
или INT128
Функция BIN_XOR
возвращает результат побитовой операции XOR
аргументов.