В практике разработки часто возникает ситуация, когда время хранится в базе данных в виде обычного целого числа (количества секунд). Это удобно для математических расчетов, но совершенно нечитаемо для конечного пользователя. Согласитесь, пользователю гораздо привычнее видеть 2:10, чем 130. В данной статье мы разберем, как преобразовать эти данные в понятный формат «минуты:секунды» (MM:SS) двумя способами: непосредственно в запросе MS SQL Server и средствами платформы 1С.
Если мы работаем напрямую с СУБД, нам необходимо использовать возможности языка T-SQL. Рассмотрим ситуацию, когда у нас есть поле Seconds с целочисленным значением. Основная логика заключается в выделении целой части минут и остатка секунд.
Способ 1: Математический расчет и конкатенация строк
Проанализируем самый простой с точки зрения логики подход. Мы делим общее количество секунд на 60, чтобы получить минуты, и используем оператор взятия остатка от деления (%), чтобы получить секунды. Однако здесь есть важный нюанс: если секунд меньше 10, формат может превратиться в «2:5» вместо «2:05». Чтобы этого избежать, мы добавим ведущий ноль.
Рассмотрим пример кода:
SELECT
CAST(Seconds / 60 AS VARCHAR) + ':' +
RIGHT('0' + CAST(Seconds % 60 AS VARCHAR), 2) AS [Время_ММ_СС]
FROM ВашаТаблица
Разберем, что здесь происходит:
Seconds / 60 — выполняется целочисленное деление. Если тип данных поля INT, дробная часть будет отброшена автоматически.Seconds % 60 — мы получаем остаток, то есть «хвост» секунд, не вошедших в полные минуты.RIGHT('0' + ..., 2) — это важная функция форматирования. Мы приклеиваем символ «0» в начало секунд и берем только 2 правых знака. Если секунд было 5, получится «05», если 15 — получится «015», из которого функция RIGHT возьмет «15».Способ 2: Использование функций времени (DATEADD и CONVERT)
Если нам нужно более элегантное решение и количество секунд не превышает 24 часов (86400), мы можем применить «трюк» с добавлением секунд к базовой дате.
Посмотрим на пример:
SELECT
CONVERT(VARCHAR(5), DATEADD(second, Seconds, '00:00:00'), 108) AS [Время_ММ_СС]
FROM ВашаТаблица
В этом случае функция DATEADD добавляет наши секунды к «нулевому» времени. Функция CONVERT с параметром 108 возвращает строку в формате HH:MM:SS. Если мы используем VARCHAR(5), SQL Server просто обрежет строку, оставив только часы и минуты, что не совсем то, что нам нужно для «минут и секунд». Чтобы получить именно минуты и секунды, лучше использовать 114 стиль или функцию SUBSTRING.
Способ 3: Функция FORMAT (SQL Server 2012+)
Проанализируем наиболее современный подход, который позволяет гибко настраивать вывод:
SELECT
FORMAT(DATEADD(second, Seconds, 0), 'mm:ss') AS [Время_ММ_СС]
FROM ВашаТаблица
Этот метод очень удобен, но помните, что на огромных выборках (миллионы строк) функция FORMAT работает медленнее, чем классический CAST и CONVERT.
Теперь выясним, как решить ту же задачу, если вы работаете в экосистеме 1С. Здесь подход разделяется на работу в запросе и работу в коде (на встроенном языке).
Вариант 1: Преобразование в языке запросов 1С
Как справедливо заметили участники форума, в языке запросов 1С нельзя напрямую преобразовать число в строку. Однако мы можем преобразовать число в Дату. Это позволит нам использовать механизмы форматирования самой платформы при выводе данных.
Рассмотрим пример запроса:
ВЫБРАТЬ
ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(1, 1, 1), СЕКУНДА, Т.КоличествоСекунд) КАК ПолеДата
ИЗ
Справочник.ВашаТаблица КАК Т
После того как мы получили поле типа Дата, нам не нужно мучиться со строками в самом запросе. Если вы используете Систему компоновки данных (СКД), просто зайдите в настройки оформления поля и установите Форматную строку: ДФ=мм:сс. Платформа сама отобразит дату как нужное нам время.
Вариант 2: Преобразование во встроенном языке 1С
Если данные уже получены из базы и их нужно обработать в коде (например, для вывода в форму или сообщение), используйте следующий метод:
// Предположим, КоличествоСекунд = 130;
ПустаяДата = '00010101'; // Базовая дата 1С
НужнаяДата = ПустаяДата + КоличествоСекунд;
ПредставлениеВремени = Формат(НужнаяДата, "ДФ=мм:сс");
// Результат будет "02:10"
Здесь мы используем особенность 1С: при сложении объекта типа Дата и числа, система интерпретирует число как количество секунд и прибавляет их к дате. Функция Формат с параметром ДФ=мм:сс позволяет мгновенно получить красивую строку.
Разберем несколько критических моментов, которые могут встретиться в работе:
мм:сс может показать 01:01, потеряв час. Если ваша задача — показать общее количество минут (например, 61:01), то методы с типом Дата не подойдут. В этом случае используйте только математический расчет: ЦелоеЧислоМинут = Цел(Секунды / 60).FLOAT, результат 130 / 60 будет 2.1666, и вам придется дополнительно использовать функцию FLOOR() для отсечения дробной части перед конвертацией в строку.Мы проанализировали различные подходы к конвертации времени. Выбор конкретного метода зависит от того, где именно вы хотите видеть результат: в консоли запросов SQL, в отчете СКД или в экранной форме 1С. Каждый из предложенных вариантов является рабочим и широко используется в профессиональной разработке.