0

我正在尝试每天从 SQL 数据库中选择一个小时间隔之间的所有行。日期时间列称为“Dt”,日期时间格式如下:2019-10-17 16:03:43

我想每天从这个表中提取 Dt 介于 22:00:00 和 02:00:00 之间的所有行。

SELECT *
FROM MY_TABLE
WHERE "Dt" BETWEEN '*-*- 22:00:00' AND '*-*- 02:00:00';

其中 * 应该是任何...

谢谢你的支持!

编辑:我忘了提:我正在使用 DB Browser for SQLite 中的集成 SQL 解释器

4

5 回答 5

0

使用 Postgres,假设dt定义为timestamp您可以执行以下操作:

SELECT *
FROM MY_TABLE
WHERE "Dt" BETWEEN "Dt"::date + time '22:00:00' and ("Dt"::date + 1) + time '02:00:00'

或者,如果您想精确排除时间戳02:00:00

SELECT *
FROM MY_TABLE
WHERE "Dt" >= "Dt"::date + time '22:00:00' 
  and "Dt" < ("Dt"::date + 1) + time '02:00:00'
于 2019-10-17T07:15:04.293 回答
0

您需要提取日期的时间部分并比较它是否在范围内。由于午夜介于 22 和 2 之间,您需要将其拆分为两个比较,即 22 和 0 之间以及 0 和 2 之间的时间。

要了解如何提取时间,请查看这个问题

于 2019-10-17T07:09:50.070 回答
0
 select DT_time from (
    select cast (substr(to_char(Dt,'dd-mm-yyyy HH:MM:SS'),12,2) as integer ) as DT_time from MY_TABLE )
 where  DT_time between 2 and 22;
于 2019-10-17T07:53:12.503 回答
0

22:00:00 至 02:00:00 之间

方法:

SELECT *
FROM MY_TABLE
WHERE 
  substr(Dt, 12) BETWEEN '22:00:00' AND '23:59:59'
  OR
  substr(Dt, 12) BETWEEN '00:00:00' AND '02:00:00'
于 2019-10-21T07:42:15.853 回答
-1

这将起作用::

SELECT *
FROM MY_TABLE
WHERE DATEPART(HOUR, Dt)>22  
AND DATEPART(HOUR, Dt)<2 

更新 :

SELECT * 
FROM MY_TABLE 
WHERE Dt Between DATEADD (hour,22,DATEADD(day, DATEDIFF(day, 0, Dt), 0)) AND DATEADD (hour,2,DATEADD(day, DATEDIFF(day, -1, Dt), 0))


SELECT *
FROM MY_TABLE
WHERE DATEPART(HOUR, Dt)>22  
OR DATEPART(HOUR, Dt)<2

以上查询为您工作.. 第一个将仅检查特定日期和连续的下一个日期以及您的时间范围。但是,如果您不关心日期并且只在特定时间寻找时间间隔,那么第二个适合您。

对于 SQLite:

SELECT *
FROM MY_TABLE
WHERE strftime('%H','Dt')>22  
OR strftime('%H','Dt')<2 
于 2019-10-17T07:11:19.173 回答