pg_extra_time
一些关于日期与时间的扩展函数
仓库
bigsmoke/pg_extra_time
https://github.com/bigsmoke/pg_extra_time
源码
pg_extra_time-2.0.0.tar.gz
pg_extra_time-2.0.0.tar.gz
概览
| 扩展包名 | 版本 | 分类 | 许可证 | 语言 |
|---|---|---|---|---|
pg_extra_time | 2.0.0 | UTIL | PostgreSQL | SQL |
| ID | 扩展名 | Bin | Lib | Load | Create | Trust | Reloc | 模式 |
|---|---|---|---|---|---|---|---|---|
| 4220 | pg_extra_time | 否 | 是 | 否 | 是 | 否 | 是 | - |
| 相关扩展 | pgsql_tweaks periods temporal_tables pg_cron gzip bzip zstd http |
|---|
版本
| 类型 | 仓库 | 版本 | PG 大版本 | 包名 | 依赖 |
|---|---|---|---|---|---|
| EXT | MIXED | 2.0.0 | 1817161514 | pg_extra_time | - |
| RPM | PGDG | 2.0.0 | 1817161514 | pg_extra_time_$v | - |
| DEB | PIGSTY | 2.0.0 | 1817161514 | postgresql-$v-pg-extra-time | - |
构建
您可以使用 pig build 命令构建 pg_extra_time 扩展的 DEB 包:
pig build pkg pg_extra_time # 构建 DEB 包
安装
您可以直接安装 pg_extra_time 扩展包的预置二进制包,首先确保 PGDG 和 PIGSTY 仓库已经添加并启用:
pig repo add pgsql -u # 添加仓库并更新缓存
使用 pig 或者是 apt/yum/dnf 安装扩展:
pig install pg_extra_time; # 当前活跃 PG 版本安装
pig ext install -y pg_extra_time -v 18 # PG 18
pig ext install -y pg_extra_time -v 17 # PG 17
pig ext install -y pg_extra_time -v 16 # PG 16
pig ext install -y pg_extra_time -v 15 # PG 15
pig ext install -y pg_extra_time -v 14 # PG 14
dnf install -y pg_extra_time_18 # PG 18
dnf install -y pg_extra_time_17 # PG 17
dnf install -y pg_extra_time_16 # PG 16
dnf install -y pg_extra_time_15 # PG 15
dnf install -y pg_extra_time_14 # PG 14
apt install -y postgresql-18-pg-extra-time # PG 18
apt install -y postgresql-17-pg-extra-time # PG 17
apt install -y postgresql-16-pg-extra-time # PG 16
apt install -y postgresql-15-pg-extra-time # PG 15
apt install -y postgresql-14-pg-extra-time # PG 14
创建扩展:
CREATE EXTENSION pg_extra_time;
用法
转换为秒(浮点数)
SELECT to_float('1970-01-01 00:00:00+0'::timestamptz); -- 0.0
SELECT to_float('1 day 1 sec'::interval); -- 86401.0
SELECT to_float('[2024-06-06 05:58:00,2024-06-06 06:00:10]'::tstzrange); -- 130.0
也支持类型转换语法:
SELECT '1970-01-01 01:03:01+00'::timestamptz::float; -- 3181.00
SELECT '1 day 1 sec 200 ms'::interval::float; -- 86401.2
转换为天数
SELECT days('[2024-06-06,2024-06-08 06:00]'::tstzrange); -- 3.25(小数天数)
SELECT whole_days('[2024-06-06,2024-06-08 18:00]'::tstzrange); -- 2(仅整天数)
SELECT days('10 days 12 hours'::interval); -- 10.5
SELECT whole_days('10 days 20 hours'::interval); -- 10
从范围中提取时间间隔
SELECT to_interval('[2024-01-01,2024-01-05]'::tstzrange); -- 4 days
Each 函数(从范围生成序列)
SELECT * FROM each_subperiod('[2024-01-01,2024-01-05]'::tstzrange, '1 day'::interval);
运算符
-- 范围持续时间转换为浮点数(秒)
SELECT '[epoch,1970-01-01T01:03:01+00]'::tstzrange::float;
-- 时间间隔转换为浮点数(秒)
SELECT '10 seconds 100 milliseconds'::interval::float; -- 10.100