• 首页
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案
目录

postgresql怎么查询一段时间内每天指定时间段内的数据

postgresql查询一段时间内每天指定时间段内的数据的方法:1、使用 extract() 函数;2、使用 created_at::time 提取时间部分。使用 extract() 函数是指使用extract(hour from created_at) 提取 created_at 的小时值。

一、postgresql查询一段时间内每天指定时间段内的数据的方法

1、使用 extract() 函数

SELECT *
FROM your_table
WHERE created_at >= '2023-05-01'
AND created_at < '2023-06-01' AND extract(hour from created_at) >= 8
AND extract(hour from created_at) < 18;

查询语句中,我们使用了 WHERE 条件来筛选符合条件的数据。created_at 表示数据记录的时间,我们要查询的是在 2023 年 5 月 1 日至 6 月 1 日期间,每天时刻在上午 8 点至下午 6 点之间的数据。其中,extract(hour from created_at) 函数用于提取 created_at 的小时值,即只选取数据记录的时刻作为查询条件。我们通过从时间戳中提取小时值的方式来限制查询时间范围。如果需要查询其他时间段,可以调整这里的条件。

2、使用 created_at::time 提取时间部分

SELECT *
FROM your_table
WHERE created_at >= '2023-05-01'
AND created_at < '2023-06-01' AND created_at::time >= '08:00:00'
AND created_at::time < '18:00:00';

这个查询语句与前面的语句相比,少了 extract() 函数,而是直接使用了 created_at::time 来提取时间部分,即只选取数据记录的时刻作为查询条件。同时,我们也不再使用时刻的小时值作为条件,而是直接使用具体的时间字符串表示时间范围。需要注意的是,在这个查询语句中,我们不使用 BETWEEN 关键字来处理时间范围。这是因为 BETWEEN 关键字会包含范围边界的数值,而我们实际上希望查询的时刻所处的时间范围是开区间,因此使用 < 和 >= 操作符更为合适。

二、PostgreSQL介绍

1、简介

PostgreSQL 是一个免费的对象-关系数据库服务器(ORDBMS),在灵活的BSD许可证下发行。PostgreSQL 开发者把它念作 post-gress-Q-L。PostgreSQL 的 Slogan 是 “世界上非常先进的开源关系型数据库”。

2、ORDBMS 术语

  • 数据库: 数据库是一些关联表的集合。
  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。
  • 列: 一列(数据元素) 包含了相同的数据, 例如邮政编码的数据。
  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。
  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。
  • 主键:主键是少数的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。
  • 外键:外键用于关联两个表。
  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。
  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。
  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

3、PostgreSQL 特征

  • 函数:通过函数,可以在数据库服务器端执行指令程序。
  • 索引:用户可以自定义索引方法,或使用内置的 B 树,哈希表与 GiST 索引。
  • 触发器:触发器是由SQL语句查询所触发的事件。如:一个INSERT语句可能触发一个检查数据完整性的触发器。触发器通常由INSERT或UPDATE语句触发。 多版本并发控制:PostgreSQL使用多版本并发控制(MVCC,Multiversion concurrency control)系统进行并发控制,该系统向每个用户提供了一个数据库的”快照”,用户在事务内所作的每个修改,对于其他的用户都不可见,直到该事务成功提交。
  • 规则:规则(RULE)允许一个查询能被重写,通常用来实现对视图(VIEW)的操作,如插入(INSERT)、更新(UPDATE)、删除(DELETE)。
  • 数据类型:包括文本、任意精度的数值数组、JSON 数据、枚举类型、XML 数据等。
  • 全文检索:通过 Tsearch2 或 OpenFTS,8.3版本中内嵌 Tsearch2。
  • NoSQL:JSON,JSONB,XML,HStore 原生支持,至 NoSQL 数据库的外部数据包装器。
  • 数据仓库:能平滑迁移至同属 PostgreSQL 生态的 GreenPlum,DeepGreen,HAWK 等,使用 FDW 进行 ETL。

4、PostgreSQL 语法

默认情况下 PostgreSQL 安装完成后,自带了一个命令行工具 SQL Shell(psql)。Linux 系统可以直接切换到 postgres 用户来开启命令行工具:

#  sudo -i -u postgres

Windows 系统一般在它的安装目录下:Program Files → PostgreSQL 11.3 → SQL Shell(psql)。Mac OS 我们直接搜索就可以了找到。

进入命令行工具,我们可以使用 \help 来查看各个命令的语法 :

postgres-# \help <command_name>

例如,我们查看下 select 语句的语法:

postgres=# \help SELECT
Command:     SELECT
Description: retrieve rows from a table or view
Syntax:
[ WITH [ RECURSIVE ] with_query [, ...] ]
SELECT [ ALL | DISTINCT [ ON ( expression [, ...] ) ] ]
    [ * | expression [ [ AS ] output_name ] [, ...] ]
    [ FROM from_item [, ...] ]
    [ WHERE condition ]
    [ GROUP BY grouping_element [, ...] ]
    [ HAVING condition [, ...] ]
    [ WINDOW window_name AS ( window_definition ) [, ...] ]
    [ { UNION | INTERSECT | EXCEPT } [ ALL | DISTINCT ] select ]
    [ ORDER BY expression [ ASC | DESC | USING operator ] [ NULLS { FIRST | LAST } ] [, ...] ]
    [ LIMIT { count | ALL } ]
    [ OFFSET start [ ROW | ROWS ] ]
    [ FETCH { FIRST | NEXT } [ count ] { ROW | ROWS } ONLY ]
    [ FOR { UPDATE | NO KEY UPDATE | SHARE | KEY SHARE } [ OF table_name [, ...] ] [ NOWAIT | SKIP LOCKED ] [...] ]

from_item 可以是以下选项之一:

    [ ONLY ] table_name [ * ] [ [ AS ] alias [ ( column_alias [, ...] ) ] ]

延伸阅读1:PostgreSQL缺点

从 Postgres 开始,PostgreSQL 就经受了多次变化。首先,早期的 PostgreSQL 继承了几乎所有 Ingres, Postgres, Postgres95 的问题:过于学院味,因为首先它的目的是数据库研究,因此不论在稳定性,性能还是使用方方面面,长期以来一直没有得到重视,直到 PostgreSQL 项目开始以后,情况才越来越好,PostgreSQL 已经完全可以胜任任何中上规模范围内的应用范围的业务。其次,PostgreSQL 的确还欠缺一些比较高端的数据库管理系统需要的特性,比如数据库集群,更优良的管理工具和更加自动化的系统优化功能 等提高数据库性能的机制等。

相关文章