本文介绍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