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 的确还欠缺一些比较高端的数据库管理系统需要的特性,比如数据库集群,更优良的管理工具和更加自动化的系统优化功能 等提高数据库性能的机制等。