postgres查询从基于月份和时间的日期\时间列筛选中提取数据

2024-10-03 17:22:47 发布

您现在位置:Python中文网/ 问答频道 /正文

    Date/Time                   mydata1         mydata2
    -------------------  ----------------------------
    2020/09/22 00:02:00     data2              somedata2
    2020/09/22 00:04:00     data3              somedata3
    2020/09/23 00:02:00     data4              somedata4
    2020/09/23 00:04:00     data3              somedata5
    2020/09/22 00:00:00     data1              somedata1

Date/Timemydata1mydata2是列。 因此,考虑到我有2个月的数据,所以我想查询一个特定的时间范围,抽取1个月。注意:日期/时间是一个文本字段

在这里,通过查询,我应该提取时间02:00和04:00之间的9月份数据,因此输出应该如下所示:

2020/09/22 00:02:00      data2         somedata2
2020/09/22 00:04:00      data3         somedata3
2020/09/23 00:02:00      data4         somedata4
2020/09/23 00:04:00      data3         somedata5

Tags: 数据datetime时间data1data2data3mydata2
1条回答
网友
1楼 · 发布于 2024-10-03 17:22:47

一个初步的解决办法是:

SELECT * FROM tbl WHERE dt_fld between '2020/09/01'::date AND '2020/09/30'::date

这是九月份的dt_fld是一个虚构的名称,用于代表实际调用的Date/Time字段::date是Postgres的缩写,用于将CAST文本转换为date类型。另一种说法是CAST('2020/09/01' as date)

更新

理想的解决方案:

CREATE TABLE month_test("Date/Time" varchar, mydata1 varchar, mydata2 varchar);

insert into month_test values ('2020/09/22 00:02:00', 'data2', 'somedata2');
insert into month_test values ('2020/09/22 00:04:00', 'data3', 'somedata3');
insert into month_test values ('2020/09/23 00:02:00', 'data4', 'somedata4');
insert into month_test values ('2020/09/23 00:04:00', 'data3', 'somedata5');
insert into month_test values ('2020/09/22 00:00:00', 'data1', 'somedata1');

SELECT
    *
FROM
    month_test
WHERE
    date_part('month', "Date/Time"::timestamp) = 9
    AND "Date/Time"::time BETWEEN '00:02:00'::time
    AND '00:04:00'::time;

 Date/Time      | mydata1 |  mydata2  
          -+    -+     -
 2020/09/22 00:02:00 | data2   | somedata2
 2020/09/22 00:04:00 | data3   | somedata3
 2020/09/23 00:02:00 | data4   | somedata4
 2020/09/23 00:04:00 | data3   | somedata5

使用date_part仅查找9月份的时间戳。然后只有那些在时间范围内00:02:00 - 00:04:00

相关问题 更多 >