SQlite:选择特定时间范围内的行,忽略日期

时间:2016-08-01 21:43:29

标签: sqlite

我有一个名为messages的表,它存储来自聊天的消息,其中包含以下列:username, message, datetime,其中日期时间的类型为TEXT,并以下列格式存储:“yyyy / MM / dd hh:mm:ss“。我想检索特定时间范围内的平均行数,而不必担心日期。例如:

SELECT avg(count(message))
FROM messages
WHERE datetime < "2016/mm/dd 13:00:00" AND
      datetime > "2016/mm/dd 12:00:00"

是否有一些操作符允许任何字符代替“mm”和“dd”。本质上,我正在尝试构建一个查询,以检索特定时间范围内的平均消息量,而不是特定日期的消息量。

1 个答案:

答案 0 :(得分:0)

如果我正确阅读了您的问题,您希望在WHERE12小时之间使用13子句限制在2016年任何日历日期。在这种情况下,您可以使用STRFTIMEdatetime列中以字符串格式提取年份和小时。

SELECT COUNT(message)
FROM messages
WHERE STRFTIME('%Y', datetime) = '2016' AND
      STRFTIME('%H', datetime) < '13' AND
      STRFTIME('%H', datetime) > '12'

请注意,不等式应该与字符串一起使用的原因是因为数字字符串仍然基于它们的词典顺序排序。

<强>更新

由于您的日期时间列采用非标准格式,因此您可以通过在WHERE子句中对需要使用的各种部分进行子字符串处理来解决此问题:

SELECT COUNT(message)
FROM messages
WHERE SUBSTR(datetime, 1, 4) = '2016' AND
      SUBSTR(datetime, 12, 2) < '13' AND
      SUBSTR(datetime, 12, 2) > '12'