#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.