Могу ли я добавить этот формат в sqlite3 - PullRequest
2 голосов
/ 09 мая 2020

У меня есть столбцы с именем time_spent, и это примерно так: чч: мм: сс. Например, 00:23:11, это 23 минуты 11 секунд. Интересно, как я могу сложить несколько из них. Скажите, например, 00:23:11 + 00:10:20 = 00:33:31. Я не уверен, как это сделать напрямую в командах. Я пробовал convert и CAST, но они закончились неудачей. Любая помощь будет оценена.

Ответы [ 3 ]

2 голосов
/ 09 мая 2020

Вы можете преобразовать время в секунды, используя time_to_sec(), суммировать их, а затем преобразовать результат во время, используя sec_to_time().

В качестве примера следующий запрос вычислит общее количество time_spent по всей таблице:

select sec_to_time(sum(time_to_sec(time_spent))) total_time_spent
from mytable

Это будет работать, даже если ваше время хранится в виде строки, поскольку их формат соответствует формату MySQL для типа данных time.

Примечание что MySQL time тип данных может обрабатывать значения только от -838: 59: 59 до 838: 59: 59. Если ваше общее время больше этого, вы не сможете преобразовать его обратно в time.

1 голос
/ 09 мая 2020

Вы можете сделать это с помощью функции time():

select time('00:23:11', '+00:10:20')

или просто:

select time('00:23:11', '00:10:20')

Результат:

00:33:31

Если сумма может превышать 24 часа, например, если вы хотите добавить '23:59:59' к '00:23:11', используйте этот оператор:

select 
  case 
    when strftime('%d', datetime('00:23:11', '23:59:59')) = '01' then time('00:23:11', '23:59:59')
    else (24 + time('00:23:11', '23:59:59')) || strftime(':%M:%S', time('00:23:11', '23:59:59')) 
  end

Или:

select 
 (24 * (strftime('%d', datetime('00:23:11', '23:59:59')) - 1) + time('00:23:11', '23:59:59')) || 
 strftime(':%M:%S', time('00:23:11', '23:59:59'))

Результат :

24:23:10
1 голос
/ 09 мая 2020

Если вы сохраняете даты в форматах DATE, TIME и DATETIME, вы можете использовать множество доступных функций даты и времени .

...