0

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

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 数据库。时间列的类型为 VARCHAR。

4

2 回答 2

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 
于 2014-04-28T16:22:15.227 回答
0

感谢您的帖子和这个答案,我想出了这个解决方案:

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');
于 2014-04-29T14:04:12.943 回答