Время преобразования Sqlite в секунды

#sqlite

#sqlite

Вопрос:

У меня есть запрос, который выдает столбцы Username, TotalPages, totalTime, AveragePage

 SELECT UserName,TotalPages,TotalTime,cast(strftime('%H',TotalTime)*3600 as integer) as AveragePerPage FROM
(
SELECT UID FROM DPS WHERE UID >0
)a
LEFT JOIN
(
SELECT UID,UserName,COUNT(UserName) as TotalPages,cast((sum(strftime('%s', endtime) - strftime('%s', starttime))/3600)as varchar) || ":" || cast(((sum(strftime('%s', endtime) - strftime('%s', starttime))/60)%60)as varchar) || ":" || cast((sum(strftime('%s', endtime) - strftime('%s', starttime))%60)as varchar) as TotalTime FROM abbottTimer GROUP BY UID
)b ON a.UID = b.UID
GROUP BY a.UID
  

введите описание изображения здесь

Строка, содержащая один H, выдает нулевое значение
, но двузначная цифра выдает данные. Как я могу это сделать. Я использую sqlite.
Редактировать:
Также как вычислить его для HH: MM: SS

Ответ №1:

Поддерживаемые временные строки содержат две цифры во всех полях.

Встроенные функции времени не могут обрабатывать значения в вашей базе данных. Вы должны их изменить.

Ответ №2:

 SELECT UserName,TotalPages,TotalTime,CAST(sum((TotalTime1/TotalPages)/3600) as varchar) || ":" || CAST(sum(((TotalTime1/TotalPages)/60)%60) as varchar) || ":" || CAST(sum((TotalTime1/TotalPages)%60) as varchar) as Averageperpage
                                  FROM
(
SELECT UID FROM DPS WHERE UID >0
)a
LEFT JOIN
(
SELECT UID,UserName,COUNT(UserName) as TotalPages,cast((sum(strftime('%s', endtime) - strftime('%s', starttime))/3600)as varchar) || ":" || cast(((sum(strftime('%s', endtime) - strftime('%s', starttime))/60)%60)as varchar) || ":" || cast((sum(strftime('%s', endtime) - strftime('%s', starttime))%60)as varchar) as TotalTime,sum(STRFTIME('%s',endtime) - STRFTIME('%s',starttime)) as TotalTime1 FROM abbottTimer GROUP BY UID
)b ON a.UID = b.UID
GROUP BY a.UID
  

Я только что решил это. Разделите целое число на 3600 на часы и т. Д

Ответ №3:

Вы должны показать нам исходные TotalTime значения, хранящиеся в вашей базе данных. Кроме того, вы читали документ sqlite о strftime том, где вы можете использовать %s модификатор, чтобы ваше время возвращалось в виде количества секунд с 19700101.

Я лично использую datetime(<myTime>, 'unixepoch') , когда работаю с датой и временем.

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

1. Это целочисленный тип данных.

2. я попробовал strftime('%s',TotalTime) , но возникла та же проблема. Один час, подобный 8:34:32 нулевому значению

3. И что вы храните в этом целом числе? количество секунд с 1970 года?

4. прошедшее время кодирования.

5. я полагаю, в секундах. Таким образом, у вас уже есть время в секундах, и вам не нужно выполнять какое-либо преобразование или умножение на 3600.