本文介绍Date类型间做减法的结果情况。
背景说明
Oracle中Date与Date类型相减,结果为浮点类型,在PolarDB O引擎中,结果为Interval类型。这种类型差异一般会引起业务SQL中时间计算部分发生语法错误。
解决方案
在PolarDB O引擎中对Date类型减法做简单的语法改造即可适配,改造思路是使用extract函数将Interval类型转换为浮点型,使结果与Oracle保持一致。
详情请参见https://www.postgresql.org/docs/11/functions-datetime.html。
示例
以下以使用函数改造为例:
CREATE OR REPLACE FUNCTION time_between(TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH TIME ZONE)
RETURNS FLOAT8 AS
$m$
SELECT EXTRACT(EPOCH FROM $1-$2)/86400;
$m$ LANGUAGE SQL STRICT IMMUTABLE;
-- select sysdate - date '2020-06-28' from dual;
-- 改造为
select time_between(sysdate, date '2020-06-28');
1.29990540226852