我想从数据集中查询子集。每行都有以下格式的时间戳:
2014-04-25T17:25:14
2014-04-25T18:40:16
2014-04-25T18:44:57
2014-04-25T19:10:32
2014-04-25T20:22:12
...
目前,我使用以下查询来选择基于时间的子集:
time LIKE '%2014-04-25T18%' OR time LIKE '%2014-04-25T19%'
当您开始按分钟或秒进行过滤时,这会变得非常复杂。
有没有办法运行查询,例如......
time > '%2014-04-25T18%' AND time < '%2014-04-25T19%'
正则表达式也可以。
数据库是SpatiaLite database。时间列的类型为VARCHAR。
答案 0 :(得分:1)
如果将日期视为字符串并基于上述示例:
time LIKE '%2014-04-25T18%' AND time <> '%2014-04-25T18:00:00:000'
否则,您可以将日期转换为午夜后的秒数,并添加60分钟以创建过滤器的范围部分
DECLARE @test DATETIME = '2014-04-25T17:25:14'
SELECT @test
, CONVERT(DATE,@test) AS JustDate
, DATEDIFF(s,CONVERT(DATETIME,(CONVERT(DATE,@test))), @test) AS SecondsSinceMidnight
-- 60 seconds * 60 minutes * 24 hours = 86400
答案 1 :(得分:0)
感谢您的帖子和this answer我想出了这个解决方案:
SELECT * FROM data
WHERE DATETIME(
substr(time,1,4)||'-'||
substr(time,6,2)||'-'||
substr(time,9,2)||' '||
substr(time,12,8)
)
BETWEEN DATETIME('2014-04-25 18:00:00') AND DATETIME('2014-04-25 19:00:00');