Toon posts:

[SQL] Tussen datum's selecteren (niet between!)

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

Verwijderd

Topicstarter
-

[ Voor 99% gewijzigd door Verwijderd op 09-08-2013 12:08 ]


  • Skaah
  • Registratie: Juni 2001
  • Niet online
Check of de einddatum van de gewenste reservering kleiner is dan de begindatum van de bezette reserveringen, of dat de begindatum van de gewenste reservering groter is dan de einddatum van de bezette reserveringen.

Het is nu nogal een vaag verhaal, misschien dat je je variabelen in de sql een beetje kunt toelichten?

  • Varienaja
  • Registratie: Februari 2001
  • Laatst online: 14-06-2025

Varienaja

Wie dit leest is gek.

Je hebt neem ik aan een tabel reserveringen, met een begin- en einddatum.

Je krijgt een periode binnen van een gebruiker. De gebruiker wil graag in die periode een huisje huren. Jij gaat kijken of dat kan.

WAT MOET ER GELDEN?

De periode waarin de gebruiker wil reserveren mag niet een begin- of einddatum van een reservering bevatten. Thats it, dus:

select * from reservering where
(begindatum>gebruikerbegin and begindatum<gebruikereind)
or
(einddatum>gebruikerbegin and einddatum<gebruikereind)

Als deze query 0 hits geeft, kan je nog reserveren in de gewenste periode.

Siditamentis astuentis pactum.


  • jochemd
  • Registratie: November 2000
  • Laatst online: 29-12-2025
Verwijderd schreef op 01 december 2003 @ 13:36:

Er is een reservering tussen 1-1-2003 en 1-1-2004.
Nu krijg ik de datum 1-5-2003 tot 1-6-2003 binnen.... hoe krijg ik het nou voor elkaar dat hij toch doorheeft dat dat huisje gererveerd is...
Daar heeft SQL OVERLAPS voor. Je maakt niet helemaal duidelijk hoe je schema er precies uit ziet, maar het zou zoiets als het volgende moeten zjn:
code:
1
2
3
SELECT plaatsnr
FROM "boeking" 
WHERE NOT (boekverblijfvan, boekverblijftot) OVERLAPS (:beginDatum, :eindDatum)

Meer details in de handleiding van je DBMS.

Verwijderd

Topicstarter
Check of de einddatum van de gewenste reservering kleiner is dan de begindatum van de bezette reserveringen, of dat de begindatum van de gewenste reservering groter is dan de einddatum van de bezette reserveringen.
en
De periode waarin de gebruiker wil reserveren mag niet een begin- of einddatum van een reservering bevatten.
Dat checkte we voor zover ik zie al... Hier mis je volgens mij dus de reserveringen die heel lang zijn. Zoals die van het voorbeeld
Er is een reservering tussen 1-1-2003 en 1-1-2004.
Nu krijg ik de datum 1-5-2003 tot 1-6-2003 binnen.... hoe krijg ik het nou voor elkaar dat hij toch doorheeft dat dat huisje gererveerd is...
All right... SQL OVERLAPS .... dat was ik waarschijnlijk aan het zoeken.... Ik zal eens gaan zoeken.

Verwijderd

Topicstarter
code:
1
2
3
SELECT plaatsnr
FROM "boeking" 
WHERE NOT (boekverblijfvan, boekverblijftot) OVERLAPS (:beginDatum, :eindDatum)

Meer details in de handleiding van je DBMS.[/quote]

helaas ondersteund Sybase ASA dit dus niet...... we zullen het denk ik dus op een andere manier moeten gaan oplossen (zoals hele dbase tot einde doorzoeken op nog niet geopende items vanaf opgegeven datum....)

  • Annie
  • Registratie: Juni 1999
  • Laatst online: 25-11-2021

Annie

amateur megalomaan

Stel dat op onderstaande tijdlijn de periode tussen P1 en P2 de gewenste huurperiode is. Dan hoef je alleen maar te controleren of er een overlap is met 1 van 4 situaties (de periodes A-B, C-D, E-F en G-H) en in dat geval is er al een reservering.

code:
1
2
3
4
5
6
7
                  P1              P2
tijdlijn ---------|---------------|---------
             A----|---B           |
                  |            C--|-----D
                  |   E------F    |
             G----|---------------|-------H
                  |               |


En hiermee moet het geen probleem zijn om een query samen te stellen, toch? Of begrijp ik je nu verkeerd?

Today's subliminal thought is:


Verwijderd

Kun je niet gewoon time(); in combinatie met if statements gebruiken ?

time(); geeft je een numerikewaarde, je hebt dan alleen 2 kolommen nodig de start en eind tijd van de reservering.

Het gebruik van SQL OVERLAPS is een beetje vaag hier, gewoon time(); in combinatie met if statements.

Of ben ik nou van het padje af ? :)


edit: Oh kijk, een dubbelpost, modbreak aub. als er 1 toevallig langskomt. :)

[ Voor 26% gewijzigd door Verwijderd op 01-12-2003 22:53 ]

Pagina: 1