SQL razlika izmedu dva datuma

kako bih mogao napraviti Trigger koji bi racunao razliku u danima izmedu dva datuma te mnozio ju s 2 i to zapisao u odredenu kolonu.

ovo je kod koji sam pokusao,ali neradi

[HTML]CREATE TRIGGER zakasnina
ON probna
FOR INSERT,UPDATE
AS
DECLARE @Datum_povratka DATE
DECLARE @Datum_posudbe DATE;
SELECT @Datum_povratka = Datum_povratka , @Datum_posudbe = Datum_posudbe
FROM inserted;

UPDATE probna SET Zakasnina = ((Datum_povratka-Datum_posudbe)-10)*2;[/HTML]

tražeći primjere vidio sam da možda griješim te da se to što mi treba možda ipak neradi preko triggera…Može li mi netko pomoći riješit problem?

MS SQL Server ima funkciju
DATEDIFF ( datepart , startdate , enddate )

Ako koristiš procku za zapis podataka, utrpaj to tamo.

Primjer:

SELECT broj_dana = DATEDIFF(DAY, datum_posudbe, datum_povratka)

EDIT: Ako radiš nešto tipa videoteke, obrati pažnju da datum posudbe nije datum kada se nešto treba vratiti. Obično je to +1 dan. Onda uzmi u obzir i vikend posudbe kada je vraćanje +2 dana. Ne zaboravi ni praznike kada videoteka ne radi… Ima toga.

hvala na odgovoru…radim bazu školske knjižnice pa zato imam razliku -10 od datuma posudbe do datuma povratka jer je to vrijeme koje se ne naplaćuje…to sa DATEDIFF sam vidio ali i dalje nerazumijem kako napraviti da kad se unesu datum posudbe i datum povratka da se automatski izracuna zakasnina i upise u tablicu…

Kako zapisuješ podatak kada je osoba vratila knjigu?

Ručno će se unositi datumi posudbe i datumi povratka…sad baš gledam i mislim da meni ustvari treba calculated column ,pokušavam ali neznam kako bih napisao da mi je zakasnina:
HTML*2[/HTML]

dakle knjiga može biti posuđena 10 dana,a sve nakon toga se naplaćuje 2kn po danu…može neka ideja kako napisati Zakasninu?

Samo malo. Kako to misliš “ručno”? Netko će direktno u bazu upisivati podatake?
Nadam se ipak da nije to slučaj.

Najlakše je to riješiti kroz storanu proceduru.
U stori odmah izračunaš zakasninu.
Primjer:

CREATE PROCEDURE dbo.vracanje_knjige
@knjiga INT,
@datum DATETIME --datum vracanja
AS
SET NOCOUNT ON

DECLARE @clan INT,
@datum_posudbe DATETIME,
@zakasnina DECIMAL(18,2)

SET @zakasnina = 0
– pronađi tko je posudio @knjiga, pretpostavka da postoji tablica sa trenutnim stanjem

SELECT @clan = CLAN,
@datum_posudbe = DATUM_POSUDBE
FROM tablica_knjiga
WHERE KNJIGA = @knjiga

SET @broj_dana = DATEDIFF(DAY, @datum_posudbe, @datum)
IF @broj_dana > 10
BEGIN
SET @zakasnina = (@broj_dana - 10) * 2
END

– i to sada negdje zapišeš tako da znaš da je @clan duzan zakasninu

Jel’ sada malo jasnije?


Copyright © 2020 WM Forum - AboutContact - Sponsored by: Mydataknox & Webmaster.Ninja