postgresql , funkcja, odejmowanie dat, date_part

0

Witam , chciałbym napisać funkcję, która będzie zwracać
różnicę dni pomiędzy dwoma wydarzeniami dla danego użytkownika.
Niestety wyskakują błędy związane z datepart.
Proszę Was o pomoc.

create function liczba(int) returns timestamp
language plpgsql
as
'
DECLARE 
liczba timestamp;
begin
select date_part(day,(wynajem.data_zwrotu - wynajem.data_wypozyczenia)) into liczba from wynajem where wynajem.kto_wynajal = $1;
return liczba;
END;
';
0

A co dostaniesz za wynik jak wpiszesz

SELECT wynajem.data_zwrotu::date - wynajem.data_wypozyczenia::date FROM wynajem WHERE wynajem.kto_wynajal = id_users;

I co oznacza w funkcji CREATE FUNCTION liczba(INT) ten INT co tu podajesz?

wynajem.kto_wynajal = $1;
return liczba;

a tu pod to $1 nie wstawi ci parametru tego z liczba(int) i to ma byc jako id_user który wynajął ?

DECLARE 
liczba timestamp;

A ta deklaracja ? czemu ma ci zwrocic datę skoro chcesz tylko liczbe dni nie powinno tu byc INTEGER ?

CREATE FUNCTION liczba(INT) RETURNS INTEGER
LANGUAGE plpgsql
AS
'
DECLARE 
liczba INTEGER;
BEGIN
SELECT wynajem.data_zwrotu::DATE - wynajem.data_wypozyczenia::DATE INTO liczba FROM wynajem WHERE wynajem.kto_wynajal = $1;
RETURN liczba;
END;
';

To tylko przykład pisany z jednym zamkniętym okiem więc mogę się grubo mylić.

A najlepiej jak się uczyć to poprawnie i żeby kod był czytelny no bo możesz mieć 10 zmiennych w funkcji czy wiecej, to dobrze jest zrobić sobie aliasy pod zmienne żeby potem w SQLce widzieć o co chodzi to możesz zrobić tak:

CREATE FUNCTION liczba(INT) RETURNS INTEGER
LANGUAGE plpgsql
AS
'
DECLARE 
liczba INTEGER;
id_user ALIAS FOR $1;
BEGIN
SELECT wynajem.data_zwrotu::DATE - wynajem.data_wypozyczenia::DATE INTO liczba FROM wynajem WHERE wynajem.kto_wynajal = id_user;
RETURN liczba;
END;
';

1 użytkowników online, w tym zalogowanych: 0, gości: 1