SQL Server преобразует значение переменной hh:мм:сс в значение времени

#sql #sql-server #time

Вопрос:

Есть ли способ преобразовать данные в формате varchar ‘hh:mm:ss’ во время, позволяющее суммировать?

Комментарии:

1. Ну что, это тебя устраивает? SELECT CONVERT(TIME, '10:00:22' );

2. преобразовать в дату и использовать DATEADD() ?

3. Вы тоже не можете суммировать time , это не отрезок времени, это время суток. И у вас будут проблемы, если вы продержитесь более 24 часов

4. @Charlieface, вы можете преобразовать строку «чч:мм:сс» во время, а время в секунды, а затем суммировать эти секунды, нет? Не было бы никаких проблем, если бы это заняло больше дня или месяца. Формат отображения этих секунд будет зависеть от вас (или минут, миллис …). т. е.: время в unix длится день, месяц, годы, выраженное в виде числа.

5. @CetinBasoz Правильно, но OP не просил об этом, поэтому я указал, что time само по себе это не суммируется, вам DATEDIFF также понадобится, и вы не сможете вернуть результат time , если он превысит 24 часа (вам нужно будет отформатировать вручную)

Ответ №1:

 DECLARE @InX VARCHAR(10)='09:08:23' SELECT CAST(@InX AS TIME(0))  

Комментарии:

1. Можете ли вы суммировать значения ВРЕМЕНИ?

2. Можете ли вы привести пример двух временных значений и желаемого результата? Например, чего бы вы ожидали от 10 вечера 1 часа ночи?

3. Я не могу. Автор хочет преобразовать varchar во время и после этого что-то сделать. Преобразование выполнено

4. @Сергей, на самом деле вы можете … суммировать(дата(вторая, ’00:00:00′, время)). Я бы не сказал, что вы не можете, если просто не можете суммировать(время).

5. @CetinBasoz Вы НЕ подводите итоги времени . Вы суммируете разницу, которая является числовым значением / типом данных. Не добавляйте путаницы.

Ответ №2:

Вы можете преобразовать эти значения во время, и для суммирования вы можете просто получить их разницу в секундах от полуночи до суммы. Результат будет в секундах. т. е.:

 DECLARE @times TABLE(t TIME(0)); INSERT INTO @times(t)VALUES('03:20:30'), ('02:10'), ('01:00');  SELECT SUM(DATEDIFF(SECOND, '00:00:00', t))FROM @times AS t;