使用 Oracle PL/SQL 减去时间

Subtract time using Oracle PL/SQL

我正在使用 BI Publisher 创建报告。现在,我想要的是在日期中减去 4 小时。比如我在oracle数据库中获取的日期如下,

2019-09-23T10:09:34.054+00:00

现在我希望它在报告中 return 使用 sql 是,

2019-09-23T06:09:34.054+00:00

我该怎么做?

谢谢!

使用INTERVAL?

SELECT ts - INTERVAL '4' HOUR
FROM yourTable;

Demo

如果你的源数据实际上是文本,而不是真正的时间戳列,那么你可以使用TO_TIMESTAMP_TZ先做一个转换:

SELECT
    TO_TIMESTAMP_TZ(REPLACE(s, 'T', ' ') 'YYYY-MM-DD HH24:MI:SS.FF3TZH:TZM') AS ts_original,
    TO_TIMESTAMP_TZ(REPLACE(s, 'T', ' ') 'YYYY-MM-DD HH24:MI:SS.FF3TZH:TZM') - INTERVAL '4' HOUR AS ts_offset
FROM yourTable;

你只需要减去一小部分时间。 4 小时前像这样:

select sysdate-1/6 from dual;