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