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