考虑下面的陈述:

select interval '-1 hours'

我不知道如何获得间隔的绝对值,也就是说,如果是负数,切换或删除符号.我唯一想到的是:

select abs(extract(epoch from interval '-1 hours'))

但是我想知道是否有一种更优雅的方法(一种保留区间类型的方法)?

推荐答案

CASE的表达看起来更不言自明.例子:

SELECT
    i,
    (CASE WHEN (i < INTERVAL '0') THEN (-i) ELSE i END) AS abs_i
FROM
    (VALUES
        (INTERVAL '-2 h'),
        (INTERVAL '2 m')
    ) AS foo (i)

它产生:

     i     |  abs_i
-----------+----------
 -02:00:00 | 02:00:00
 00:02:00  | 00:02:00

Postgresql相关问答推荐

PostgreSQL解释分析实际时间不加总

此PostgreSQL汇总分组不适用于窗口表达式

错误:分区表的唯一约束必须包括所有分区列

将数组插入 Postgresql 数据库

PostgreSQL错误致命:角色 username不存在

带有 -C 选项的 pg_restore 不会创建数据库

postgreSQL 将列数据类型更改为没有时区的时间戳

brew 程序更新恼人的错误信息

Postgresql - 在 Big Data 库中使用数组的性能

我应该同时指定 INDEX 和 UNIQUE INDEX 吗?

如何在 PostgreSQL 中创建 guid

使用 pg-promise 插入多条记录

Django 1.9.2 AssertionError:database connection isn't set to UTC

如何语法判断 PostgreSQL 配置文件?

判断materialized视图的上次刷新时间

PGError:错误: column of relation does not exist

docker postgres 无法从指定端口启动

PostgreSQL/JDBC 和 TIMESTAMP 与 TIMESTAMPTZ

Postgres DB 上的整数超出范围

Ruby 中 DateTime 的毫秒分辨率