[SQL] Alle datums tussen begin- en einddatum

Pagina: 1
Acties:
  • 1.840 views sinds 30-01-2008
  • Reageer

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 10:55
Een tabel Verlof bevat onder andere de volgende velden:
- Begindatum
- Einddatum
- Medewerker

Ik wil graag een SQL-query gebruiken, die voor een medewerker alle datums binnen een kalenderjaar selecteert, waarop medewerker verlof heeft ingepland.

Zelf heb ik ongeveer de volgende code in mijn hoofd:
code:
1
2
3
4
5
6
SELECT ......... AS Datum FROM Verlof
WHERE Medewerker = 35
AND Datum >= Begindatum AND Datum <= Einddatum
AND Year(Datum)  = 2002
AND Year(Begindatum) <= 2002 AND Year(Einddatum) >= 2002
ORDER BY Datum

Kan iemand mij hierbij verder helpen?

  • Woudloper
  • Registratie: November 2001
  • Niet online

Woudloper

« - _ - »

't ziet er toch goed uit :? Of begrijp ik je vraag helemaal niet... Je kan ook nog met BETWEEN gaan werken...

  • NaliXL
  • Registratie: Maart 2002
  • Laatst online: 26-03 16:37
AND Datum >= Begindatum AND Datum <= Einddatum
Ik denk dat die >= en <= gewoon = moeten worden. Anders pak je de begin en einddatum er ook bij, terwijl je zegt alles te willen hebben tussen die datums...

Genoeg is meer dan veel, en tart den overvloed


  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 13:40
Misschien een tabel joinen die 365 data bevat?

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 10:55
Woudloper schreef op 23 september 2002 @ 08:43:
't ziet er toch goed uit :? Of begrijp ik je vraag helemaal niet... Je kan ook nog met BETWEEN gaan werken...
Volgens mij is de structuur ook wel redelijk, maar ik zit met het volgende:
Als iemand een verlof heeft ingepland van 01/09/2002 tot enn met 05/09/2002 dan moet de query dus de volgende datums selecteren:
01/09/2002
02/09/2002
03/09/2002
04/09/2002
05/09/2002
Met andere woorden: Ik moet zowel de begin- en einddatum van de tabel gebruiken en deze omzetten naar een view met slechts 1 veld, namelijk datum

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 10:55
nescafe schreef op 23 september 2002 @ 08:47:
Misschien een tabel joinen die 365 data bevat?
Lijkt me niet echt handig, het systeem moet worden gebruikt voor soms wel 20 of meer jaren verlofgeschiedenis.
Het alternatief is natuurlijk om per dag een query uit te voeren die kijkt of er op die dag verlof is ingepland. Naast het verlof wordt er ook ziekmeldingen en feestdagen/verplicht ADV in de kalender getoond. Op die manier heb je > 1000 query's voor het tonen van een jaarkalender. |:)

  • Roeligan
  • Registratie: December 2001
  • Laatst online: 22-07-2025

Roeligan

Feyenoord

Volgens mij met de between functie

code:
1
2
3
AND Datum BETWEEN "2002-01-01" AND "2002-12-31" 
of 
AND Datum BETWEEN ("2002-01-01" AND "2002-12-31")


weet niet zeker meer welke van de 2? proberen zou ik zeggen.

A real man fears not mortality for it's death, he fears mortality for it's lack of life!
RatPack #814


  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 31-03 15:18

Janoz

Moderator Devschuur®

!litemod

TweakersOnly schreef op 23 september 2002 @ 08:52:
[...]

Lijkt me niet echt handig, het systeem moet worden gebruikt voor soms wel 20 of meer jaren verlofgeschiedenis.
Het alternatief is natuurlijk om per dag een query uit te voeren die kijkt of er op die dag verlof is ingepland. Naast het verlof wordt er ook ziekmeldingen en feestdagen/verplicht ADV in de kalender getoond. Op die manier heb je > 1000 query's voor het tonen van een jaarkalender. |:)


Ik denk dat dit de enige manier is om dit in SQL te doen. ANders zul je je client wat slimmer moeten maken. Je hoeft natuurlijk geen tabel te maken met 20 jaar aan datums, maar gewoon voor 1 jaar. Je moet alleen nog wel ff een oplossing vinden voor het schrikkeljaar, maar daarvoor zou je gewoon een extra kolom kunnen opnemen in je datums tabel.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Verwijderd

Roeligan schreef op 23 september 2002 @ 08:55:
Volgens mij met de between functie

code:
1
2
3
AND Datum BETWEEN "2002-01-01" AND "2002-12-31" 
of 
AND Datum BETWEEN ("2002-01-01" AND "2002-12-31")


weet niet zeker meer welke van de 2? proberen zou ik zeggen.
AND Datum BETWEEN '2002-01-01 00:00:00' AND '2002-12-31 23:59:59'

  • TweakersOnly
  • Registratie: September 2000
  • Laatst online: 10:55
Een beetje stoeien met SQL levert nu de volgende code:
code:
1
2
3
4
5
6
7
8
SELECT begindatum AS Datum FROM Verlof
WHERE Medewerker = XX
AND Year(Begindatum) <= 2002
UNION
SELECT Einddatum AS Datum FROM Verlof
WHERE Medewerker = XX
AND Year(Einddatum) >= 2002
ORDER BY Datum

Deze geeft één array terug waarin op chronologische volgorde de begin- en einddatums staan. Wie kan mij helpen om ook de tussenliggende datums tussen begin- en einddatum in deze array te zetten?

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
TweakersOnly schreef op 24 september 2002 @ 10:04:
Een beetje stoeien met SQL levert nu de volgende code:
code:
1
2
3
4
5
6
7
8
SELECT begindatum AS Datum FROM Verlof
WHERE Medewerker = XX
AND Year(Begindatum) <= 2002
UNION
SELECT Einddatum AS Datum FROM Verlof
WHERE Medewerker = XX
AND Year(Einddatum) >= 2002
ORDER BY Datum

Wie kan mij helpen om ook de tussenliggende datums tussen begin- en einddatum in deze array te zetten?
Ik vrees dat er niemand is die dat kan. Tenzij je iets met alle dagen van een jaar in een aparte tabel gaat doen, wat echter al eerder genoemd is.
Doe je dat niet dan krijg je dit niet in één query voor elkaar.

Never underestimate the power of


  • nescafe
  • Registratie: Januari 2001
  • Laatst online: 13:40
misschien heb je iets aan mijn gedachtengang:

- stop 365 dagen in een tabel
- stop 20 jaren in een andere tabel
- voeg deze samen (SELECT dagen.dag, jaren.jaar from dagen,jaren), _zonder_ join
- union select deze met een aantal schrikkeldagen
- vergelijk het resultaat van deze query met je verlofdagen


je _MOET_ een tabel hebben met alle dagen/jaren.. de query kan deze zelf niet verzinnen

* Barca zweert ook bij fixedsys... althans bij mIRC de rest is comic sans


Verwijderd

gebruik maken van een loop is zeker geen optie?

Binnen welke database moet het gebeuren?

  • PromWarMachine
  • Registratie: Oktober 2001
  • Laatst online: 31-03 21:04

PromWarMachine

Forsaken Archer

Wat je eventueel kan doen is het aanmaken in Access en dan kijken wat voor SQL code er achter zit? :?
=DateDiff("d";[Begindatum];[Einddatum])
Eigenlijk zou ik het moeten weten (heb SQL gehad) maar ik vond 't maar een niet zo heel leuke taal :/

Dividend for Starters

Pagina: 1