我有一个SQLite查询,列出了两个日期之间的所有日期。我想在那几天的时间里实现相同的目标。
这是我当前的查询,用于获取两个日期之间的所有天数
WITH RECURSIVE dates(starttime) AS
(VALUES(min(starttime))
UNION ALL SELECT date(starttime, '+1 day')
FROM v_sessions
WHERE endtime <= max(startTime))
SELECT Date(starttime) AS Date
FROM v_sessions
GROUP BY Date
ORDER BY date
输出
Date
2018-10-21
2018-10-22
2018-10-23
2018-10-24
2018-10-25
2018-10-26
2018-10-27
2018-10-28
2018-10-29
2018-10-30
2018-10-31
这是修改后的查询的预期结果。
__________
Date
2018-10-19 01:00:00
2018-10-19 02:00:00
2018-10-19 03:00:00
2018-10-19 04:00:00
2018-10-19 05:00:00
2018-10-19 06:00:00
…..
2018-10-19 23:00:00
2018-10-20 00:00:00
2018-10-20 01:00:00
2018-10-20 02:00:00
…
答案 0 :(得分:0)
基本上,您需要使用datetime
而不是date
。
关键是将date(starttime, '+1 day')
更改为datetime(starttime, '+1 hour')
。如果要在特定日期使用所有小时,则可以使用开始datetime(starttime,'start of day')
和结束:datetime(endtime, 'start of day','+23 hours')
,如果开始时间和结束时间包括特定的限制时间,则可以使用其他日期算术。
答案 1 :(得分:0)
我决定通过用在我的用例中的C#来解决这个问题。
using (SQLiteConnection con = new SQLiteConnection("Data Source = data\\Reporting.db; Version = 3;"))
{
con.Open();
using (SQLiteCommand cmd = con.CreateCommand())
{
cmd.CommandText = queryString;
while (startDateTime <= endDateTime)
{
cmd.Parameters.AddWithValue("$date", startDateTime);
maxConcurrentSessions.Rows.Add(startDateTime, Convert.ToInt32(cmd.ExecuteScalar()));
startDateTime = startDateTime.AddHours(1);
}
}
con.Close();
}