Toon posts:

[SQL] DateDiff

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb gezocht op het forum maar kom er toch niet uit :?

STEL :
ik heb een tabel met de kolommen IDclient, startDate, endDate, indicDate

PROBLEEM :
Ik moet het aantal dagen berekenen tussen 2 data te weten @selectieStart en @selectieEnd.

WAT GEBRUIK IK:
MSDE en VB --> ik wil een stored procedure maken

WAT HEB IK GEDAAN:
ik heb diverse SP's gemaakt echter zonder succes, dit forum afgezocht, ook geen succes, internet afgezocht, idem.....

De selectieStart datum haal ik als volgt op:
SET @selectieStart = '01-01-' + CAST(Datepart(yyyy, getDate()) AS CHAR(4))

De selectieEnd wordt door de gebruiker ingegeven (bijvoorbeeld 31-1-2004)

de startDate is bijvoorbeeld 20-12-2003 en de endDate is bijvoorbeeld 30-4-2004
Nu moet er uit de SP komen 31 ( DATEDIFF(DAY, @selectieStart, @selectieEnd))

Nu dit was makkelijk....

Maar nu, de startDate kan wel eens zijn 15-1-2004 en de endDate bijvoorbeeld 20-1-2004. Er moet dus gecontroleerd worden of de startDate >= selectieStart en de endDate <= selectieEnd.

Het lukt mij maar niet dit in een procedure te stoppen.....kan iemand mij een zetje in de goede richting geven???
_/-\o_

  • cimbom
  • Registratie: Juni 2001
  • Laatst online: 26-04-2024

cimbom

Just Kidding

contrloe kun je ook via datediff doen toch
datediff(day, startdate, selectiestart) >=0 betekent selectiestart is groter of gelijk aan startdate

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

[luimodus]
Is deze check niet veel makkelijker in je BL in te bouwen ipv in een SP?
[/luimodus]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Ik moet eerlijk zeggen dat ik weinig snap van je uitleg, je hebt vier data?
En je wilt testen of je "veld data" (startDate en endDate) binnen de "selectie data" (selectieStart en selectieEnd) zitten?

Dat is toch zoiets als:
SELECT (startDate BETWEEN selectionStart AND selectionEnd) AND (endDate BETWEEN selectionStart AND selectionEnd) ?

Wat ik o.a. niet snap is:
- Wat heb je nu al en wat werkt daar niet aan?
- Waar komt die 31 vandaan als je met je 20-12-2003 en 30-4-2004 werkt?

Verwijderd

Topicstarter
THXS voor de replies ;)

Ik heb een heleboel lopen 'klooien' met een SP. In princiepe lijkt mij dat makkelijker om in de SP de check in te bouwen echter ik weet niet precies hoe dat moet....althans, het is mij nog niet gelukt :?

Ik had nl. de parameters opgegeven, dan de SELECT Statement en daarna de IF THEN ELSE opgebouwd echter dit lief falicant in het honderd...

Dit was mn code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
ALTER PROCEDURE dbo.TestDateDiffSP
-- parameters
@selectieStart datetime,
@selectieEnd datetime,
@huidigJaar datetime,
@beginDateIndicClient datetime,
@eindDateIndicClient datetime,
@tempIngangsDateClient datetime,
@tempEindDateClient datetime,
@ID_client int OUTPUT,
@indicDate datetime OUTPUT,
@intTotalDays int OUTPUT
)

AS

SET @selectieStart = '01-01-' + CAST(DatePart(yyyy, @huidigJaar) AS CHAR(4))

SELECT ID_client, ingangsDatum, eindDatum, indicDatum

FROM dbo.tblIndic

BEGIN
IF ingangsDatum > @selectieStart
AND ingangsDatum = @selectieStart
SET @tempIngangsDateClient = ingangsDatum
ELSE
SET @tempIngangsDateClient = @selectieStart
END

BEGIN
IF eindDatum , @selectieEnd
AND eindDatum = @selectieEnd
SET @tempEindDateClient = eindDatum
ELSE
SET @tempEindDateClient = @selectieEnd
END

//en hier moest nog veel meer komen...


edit:

sorry ACM,
Ik had al gereplied toen jij antwoordde!
Wat ik o.a. niet snap is:
- Wat heb je nu al en wat werkt daar niet aan?
- Waar komt die 31 vandaan als je met je 20-12-2003 en 30-4-2004 werkt?
Die 31 komt van de selectieEind...die wordt opgegeven door de gebruiker echter het was slechts een voorbeeld......telling start vanaf 1-1-2004 tot en met 31-1-2004 (ook een voorbeeld)

[ Voor 16% gewijzigd door Verwijderd op 09-01-2004 23:38 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

Wat wil je nu, zonder 100 regels uitleg en voorbeeldcode bereiken?

Het verschil in dagen van de records, waar de datums van de records in een selectierange zitten?
Trouwens:
<ACM> *kuch*
<ACM> IF ingangsDatum > @selectieStart
<ACM> AND ingangsDatum = @selectieStart
<ACM> dat gaat werken :X
:)

[ Voor 45% gewijzigd door gorgi_19 op 09-01-2004 23:45 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Verwijderd

Topicstarter
kee dan, dan zonder voorbeeldcode.... ;)

DateDiff gebruiken om het totaal aantal dagen tevoorschijn te toveren die tussen 2 opgegeven datums vallen maar het kan zijn dat datum1 later is dan de startSelectie en datum 2 eerder dan de eindSelectie. (of denk ik nu te moeilijk....)
:?

Verwijderd

Topicstarter
Verwijderd schreef op 09 januari 2004 @ 23:47:
kee dan, dan zonder voorbeeldcode.... ;)

DateDiff gebruiken om het totaal aantal dagen tevoorschijn te toveren die tussen 2 opgegeven datums vallen maar het kan zijn dat datum1 later is dan de startSelectie en datum 2 eerder dan de eindSelectie. (of denk ik nu te moeilijk....)
:?
TypeFoutjes niet meegereken..... ;) , ik had de SP namelijk al weggedo.... en alleen een print bewaard B)

Excuses voor mn eigen QUOTE 8)7

[ Voor 4% gewijzigd door Verwijderd op 09-01-2004 23:49 ]

Pagina: 1