postgresql兼容MySQLdatediff函数
datediff函数兼容解决⽅案
datediff函数说明
datediff函数返回俩⽇期相差的天数,如
select datediff(‘2021-12-21 10:21:23’,now())
在postgresql中,我们使⽤date_part函数来返回俩⽇期之间的天数
date_part函数使⽤⽅法:
date_part(text,timestamp) double precision 获取⼦域(等效于extract);date_part(‘hour’,timestamp ‘2001-02-
1620:38:40’) 20
date_part(text,interval) double precision 获取⼦域(等效于extract); date_part(‘month’, interval’2 years 3months’) 3在替换数据库过程当中,我们⾃然是以最少改动应⽤代码为⾸,所以在数据库层⾯,
可以做同名函数兼容。
兼容版本⼀:
CREATE OR REPLACE FUNCTION  datediff(p_d1 TIMESTAMP with time ZONE, p_d2 TIMESTAMP with time ZONE)
RETURNS numeric
LANGUAGE plpgsql
AS $function$
DECLARE
l_result  numeric;
begin
l_result=date_part('day',p_d1-p_d2);
--    l_result:=floor(p_d1-p_d2);
return  l_result;
end;
$function$;
测试:
select datediff('2021-12-21 10:21:23',now())
这样就实现了函数兼容,但是我们发现⼀个问题,如果是俩⽇期相减为⼩于24⼩时,PG返回0,⽽MySQL只要是隔天就会返回1。如何解决呢?我们⽤extract函数提取我们⽇期参数值中的年⽉天,⽽不要时分秒。
兼容版本⼆:
CREATE OR REPLACE FUNCTION  datediff(p_d1 TIMESTAMP with time ZONE, p_d2 TIMESTAMP with time ZONE)
RETURNS numeric
LANGUAGE plpgsql
AS $function$
DECLARE
l_result  numeric;
begin
select extract(year from p_d1)||'-'||extract(month from p_d1)||'-'||extract(day from p_d1)into p_d1;
select extract(year from p_d2)||'-'||extract(month from p_d2)||'-'||extract(day from p_d2)into p_d2;
l_result=date_part('day',p_d1-p_d2);
--    l_result:=floor(p_d1-p_d2);
datediff是字符型函数return  l_result;
end;
$function$;
测试:
select datediff('2021-12-21 10:21:23',now())
select datediff('2021-1-5 20:11:23',now())
⾄此,函数兼容已做完。如果你觉得这篇⽂章对你有⽤,不妨点个⼩⼩的赞吧,咱们下期见~

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。