SQLite-获取日期范围内的所有小时数

时间:2019-03-24 09:49:39

标签: sqlite

我有一个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
…

2 个答案:

答案 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();
                }