如何按时间(大于和小于)过滤SQL?

时间:2014-04-28 15:32:43

标签: sql sqlite sql-like spatialite

我想从数据集中查询子集。每行都有以下格式的时间戳:

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。

2 个答案:

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