【问题标题】:How to filter SQL by time (greater and less than)?如何按时间(大于和小于)过滤 SQL?
【发布时间】:2014-04-28 15:32:43
【问题描述】:

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

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。

【问题讨论】:

  • 那个时间列的数据类型是什么?您使用什么数据库引擎?
  • @mhasan 。 . .这是表达时区的一种方式。这些数字是 GMT 的偏移量。
  • @GordonLinoff 不。我只是切断了时间字符串以按小时过滤。

标签: sql sqlite sql-like spatialite


【解决方案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 

【讨论】:

    【解决方案2】:

    感谢您的帖子和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');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-17
      • 2020-11-03
      • 2013-10-27
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      相关资源
      最近更新 更多