5
Philix
22.12.21
✎
11:05
|
(0) Салют!
Выбрать РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 12, 31, 10, 20, 34), ДАТАВРЕМЯ(2003, 01, 01, 9, 18, 06), СЕКУНДА)
превратилось в
SELECT date_part('epoch','2003-01-01 09:18:06'::timestamp - '2002-12-31 10:20:34'::timestamp)::numeric(15,0)
а
выбрать РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2022, 12, 31, 00, 00, 00), ДАТАВРЕМЯ(2003, 01, 01, 9, 18, 07), месяц)
в
SELECT DATEDIFF2('MONTH','2022-12-31 00:00:00'::timestamp,'2003-01-01 09:18:07'::timestamp)::numeric(15, 0)
|
|
7
Philix
22.12.21
✎
11:23
|
(6)
CREATE OR REPLACE FUNCTION public.datediff2(
character varying,
timestamp without time zone,
timestamp without time zone)
RETURNS integer
LANGUAGE 'plpgsql'
COST 100
VOLATILE PARALLEL UNSAFE
AS
$BODY$
DECLARE
arg_mode alias for $1;
arg_d2 alias for $2;
arg_d1 alias for $3;
BEGIN
if arg_mode = 'SECOND' then
return date_part('epoch',arg_d1) - date_part('epoch',arg_d2) ;
elsif arg_mode = 'MINUTE' then
return trunc((date_part('epoch',arg_d1) - date_part('epoch',arg_d2)) / 60);
elsif arg_mode = 'HOUR' then
return trunc((date_part('epoch',arg_d1) - date_part('epoch',arg_d2)) /3600);
elsif arg_mode = 'DAY' then
return cast(arg_d1 as date) - cast(arg_d2 as date);
elsif arg_mode = 'WEEK' then
return trunc( ( cast(arg_d1 as date) - cast(arg_d2 as date) ) / 7.0);
elsif arg_mode = 'MONTH' then
return 12 * (date_part('year',arg_d1) - date_part('year',arg_d2))
+ date_part('month',arg_d1) - date_part('month',arg_d2);
elsif arg_mode = 'QUARTER' then
return 4 * (date_part('year',arg_d1) - date_part('year',arg_d2))
+ date_part('quarter',arg_d1) - date_part('quarter',arg_d2);
elsif arg_mode = 'YEAR' then
return (date_part('year',arg_d1) - date_part('year',arg_d2));
end if;
END
$BODY$;
|
|