|
РАЗНОСТЬДАТ в PostgreSQL | ☑ | ||
---|---|---|---|---|
0
mistеr
22.12.21
✎
10:07
|
Оказывается, в PostgreSQL нет функции DATEDIFF(). Во что же тогда транслируется функция РАЗНОСТЬДАТ() в запросе?
У кого под рукой база на PG и профайлер, можете посмотреть? |
|||
1
pechkin
22.12.21
✎
10:09
|
а вот для этого и нужен был спец выпуск постгре
|
|||
2
Chai Nic
22.12.21
✎
10:11
|
||||
3
mistеr
22.12.21
✎
10:17
|
(1) Не для этого.
|
|||
4
FIXXXL
22.12.21
✎
10:36
|
платформа - сила :)
|
|||
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) |
|||
6
mistеr
22.12.21
✎
11:12
|
(5) Интересно. А код DATEDIFF2 можно?
|
|||
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$; |
|||
8
acanta
22.12.21
✎
11:24
|
Тоже хорошо, спасибо большое
|
|||
9
mistеr
22.12.21
✎
11:25
|
(7) Благодарю.
|
|||
10
pechkin
22.12.21
✎
11:35
|
(3) и для этого в том числе
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |