Avatar billede anri Novice
11. april 2012 - 10:54 Der er 4 kommentarer og
1 løsning

Udvælge poster hvor timespan berører timespan

Jeg har en række poster (til en kalender) der indeholder start og slut dato.
Nu skal jeg så finde alle de poster der berører en hvis periode, det kunne være 1/4-2011 til 7/4-2011.
Når jeg mener berører skal det være
* Poster med både start og slutdato indenfor den angivne periode.
* Poster med enten start eller slut-dato indenfor den angivne periode.
* Poster med startdato før og slutdato efter den angivne periode.

Man kan selvfølgelig lave en række AND/OR parametre med et væld af paranteser, men det er jo et scenarie der skal bruges så ofte at jeg tænker der må være lavet en smartere måde.

Er der en kommando a-la "between" der kan filtrere på denne måde?
Avatar billede Syska Mester
11. april 2012 - 12:38 #1
BETWEEN findes.

SELECT * FROM table WHERE a BETWEEN 1 AND 10

Med din beskrivelse vælger du jo alle poster som jeg lige forstår det.

Alt indenfor perioden.
Alt hvor en af den er indenfor perioden.
Alt hvor start og slut er udenfor perioden.

Er det ikke alle poster?
Avatar billede anri Novice
11. april 2012 - 13:38 #2
Nej for det er kun poster hvor start og slut ligger på hver sin side af udvælgelsesperioden; altså hvis der er overlap.
..ikke hvis både start og slut ligger enten før eller efter perioden.

Man kan gøre således :
AND ( (StartDate between @startDate and @endDate) OR
(EndDate between @startDate and @endDate) OR
(StartDate < @startDate AND EndDate > @endDate ))

Men jeg tænkte at der må være en funktion der medtager alle overlap.
...det ser bare ikke sådan ud.
Avatar billede Syska Mester
11. april 2012 - 14:01 #3
Er det så ikke nemmere at lave en NOT, altså sortere ting fra du ikke vil have og så tage resten.

Altså hvor Start og End er mindre eller Start og Slut er størrre.

Altså ... antaget Start altid er mindste og End altis er største Timestamp.


declare @Start datetime;
declare @End datetime;

SELECT * FROM myTable WHERE NOT (StartTime < @End OR EndTime < @Start)
Avatar billede Slettet bruger
11. april 2012 - 22:30 #4
WHERE StartDato <= PeriodeSlut AND SlutDato >= PeriodeStart
Avatar billede anri Novice
23. september 2012 - 07:13 #5
Jeg endte med at løsesum det som beskrevet i #2.
#3 & #4 medtager ikke poster hvor begge datoer enten ligger på hver side af målet eller begge ligger indenfor målet.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester