Данные функции применяются к типу бинарной строки: blob.
Для использования двоичных строковых данных в скриптах вы можете использовать шестнадцатеричную нотацию: x'0012FF', чтобы представить 3 байта: 0, 18 (16+2) и 255.
Допускается также приведение к блобу: blob'0012FF'.
Функция | Возвращаемый тип данных | Описание | Пример | Результат |
---|---|---|---|---|
length(blob) | int | Количество байт в двоичной строке blob | length(x'0012FF') | 3 |
octet_length(blob) | int | Количество байт в двоичной строке blob | octet_length(x'0012FF') | 3 |
В VKPM двоичные строковые данные хранятся как шестнадцатеричные символьные строки, используя два шестнадцатеричных символа на байт. Поэтому некоторые функции символьных строк можно применять и к бинарным строковым данным, например:
SELECT x'1a2b3c4d5e';
SELECT blob '1a2b3c4d5e';
CREATE TABLE test_blob(b blob NOT NULL, b52 blob(52));
INSERT INTO test_blob(b,b52) VALUES (x'123456', blob'78901234');
INSERT INTO test_blob(b,b52) VALUES ('123456abcdef', '78901234abcdef'); -- выполняется неявное преобразование из char в blob
SELECT length(b) as byte_length, octet_length(b) as octet_length, b from test_blob where b = x'123456';
-- возвращает: 3 3 123456
SELECT length(b) as byte_length, char_length(b) as char_length, b from test_blob where b = x'123456';
-- возвращает: 3 6 123456
-- пример извлечения части двоичной строки
SELECT b52, substring(b52, 3, 4) as part_as_Clob from test_blob;
SELECT b52, cast(substring(b52, 3, 4) as blob) as part_as_Blob from test_blob;
-- пример конкатенации двух двоичных строк
SELECT b||b52 as b_concat_result_Clob from test_blob;
SELECT convert(b||b52 , blob) as b_concat_result_Blob from test_blob;
-- сравнения разрешены, за исключением совпадений шаблонов LIKE и ILIKE в блобах
SELECT * from test_blob where b < b52;
SELECT * from test_blob where b like '1234%'; -- NOT allowed, generates an ERROR
SELECT * from test_blob where substring(b,0,9) like '1234%'; -- это допустимо, поскольку функция substring() возвращает Clob