Перейти к основному содержимому
Версия: 2.0.x

format_bytes

Преобразует количество байтов в удобочитаемую строку с соответствующими единицами измерения (B, KB, MB, GB, TB, PB, EB).

Эта функция полезна для отображения размеров файлов, таблиц, использования памяти и других метрик, связанных с хранением данных, в удобном для пользователя формате. Она использует вычисления на основе 1024 (двоичные префиксы), но отображает единицы как KB, MB, GB для простоты и привычности.

Эта функция поддерживается начиная с версии 3.4.

Синтаксис

VARCHAR format_bytes(BIGINT bytes)

Параметры

  • bytes: количество байтов для форматирования. Поддерживается тип BIGINT. Должно быть неотрицательным целым числом.

Возвращаемое значение

Возвращает значение типа VARCHAR, представляющее отформатированный размер в байтах с соответствующими единицами измерения.

  • Для значений меньше 1024: возвращает точное число с "B" (байты)
  • Для больших значений: возвращает отформатированную строку с 2 десятичными знаками и соответствующей единицей (KB, MB, GB, TB, PB, EB)
  • Возвращает NULL, если входное значение отрицательное или NULL

Примечания по использованию

  • Функция использует вычисления на основе 1024 (двоичные) внутри (1 KB = 1024 байта, 1 MB = 1024² байта и т.д.)
  • Единицы отображаются как KB, MB, GB, TB, PB, EB для привычности пользователя, хотя они представляют двоичные префиксы (KiB, MiB, GiB и т.д.)
  • Значения больше или равные 1 KB отображаются ровно с 2 десятичными знаками
  • Значения в байтах (меньше 1024) отображаются как целые числа без десятичных знаков
  • Отрицательные значения возвращают NULL
  • Поддерживает значения до 8 EB (эксабайт), охватывая весь диапазон BIGINT

Примеры

Пример 1: Форматирование различных размеров в байтах.

SELECT format_bytes(0);
-- 0 B

SELECT format_bytes(123);
-- 123 B

SELECT format_bytes(1024);
-- 1.00 KB

SELECT format_bytes(4096);
-- 4.00 KB

SELECT format_bytes(123456789);
-- 117.74 MB

SELECT format_bytes(10737418240);
-- 10.00 GB

Пример 2: Обработка граничных случаев и значений null.

SELECT format_bytes(-1);
-- NULL

SELECT format_bytes(NULL);
-- NULL

SELECT format_bytes(0);
-- 0 B

Пример 3: Практическое использование для мониторинга размера таблиц.

-- Создание примера таблицы с информацией о размере
CREATE TABLE storage_info (
table_name VARCHAR(64),
size_bytes BIGINT
);

INSERT INTO storage_info VALUES
('user_profiles', 1073741824),
('transaction_logs', 5368709120),
('product_catalog', 524288000),
('analytics_data', 2199023255552);

-- Отображение размеров таблиц в удобочитаемом формате
SELECT
table_name,
size_bytes,
format_bytes(size_bytes) as formatted_size
FROM storage_info
ORDER BY size_bytes DESC;

-- Ожидаемый результат:
-- +------------------+---------------+----------------+
-- | table_name | size_bytes | formatted_size |
-- +------------------+---------------+----------------+
-- | analytics_data | 2199023255552 | 2.00 TB |
-- | transaction_logs | 5368709120 | 5.00 GB |
-- | user_profiles | 1073741824 | 1.00 GB |
-- | product_catalog | 524288000 | 500.00 MB |
-- +------------------+---------------+----------------+

Пример 4: Точность и поведение округления.

SELECT format_bytes(1536);       -- 1.50 KB (ровно 1.5 KB)
SELECT format_bytes(1025); -- 1.00 KB (округлено до 2 знаков)
SELECT format_bytes(1048576 + 52429); -- 1.05 MB (округлено до 2 знаков)

Пример 5: Полный диапазон поддерживаемых единиц.

SELECT format_bytes(512);                    -- 512 B
SELECT format_bytes(2048); -- 2.00 KB
SELECT format_bytes(1572864); -- 1.50 MB
SELECT format_bytes(2147483648); -- 2.00 GB
SELECT format_bytes(1099511627776); -- 1.00 TB
SELECT format_bytes(1125899906842624); -- 1.00 PB
SELECT format_bytes(1152921504606846976); -- 1.00 EB

Ключевые слова

FORMAT_BYTES