Vill hitta poster som spänner över eller mellan två datum. Vänd på logiken. Hämta alla poster utom de som slutar innan startdatumet eller startar efter slutdatumet. Finns flera sätt att leka med datum. Tycker den här frågan var lite skum? Kanske denna. Vill du hitta alla poster där de två intervallen överlappar? Niklas, Det här med ascii grafik var ju bra. Aha då är jag med, följande tre kriterier måste alltså gälla : Som jag skrev ovan alltså: <b>hitta alla poster där de två intervallen överlappar</b> Äh, kom igen nu... > SELECT * FROM Tabell WHERE StartDatum < B AND SlutDatum > A <b>Som jag skrev ovan alltså: hitta alla poster där de två intervallen överlappar</b> Överlappa tycker jag man borde förstå intuitivt. Uttrycket jag gav var ett villkor för att två intervall överlappar, men kan förstås tas som en definition. Annars tycker jag att definitionen av överlappning är att det finns gemensamma tidpunkter i de två intervallen, eller på matematiskt språk: snittet av de två intervallen är icke-tomt.Hitta poster som spänner över eller mellan två datum.
Jag kan ju inte använda between för denna tar ju bara datum mellan två datum.
Ex,
Hitta rader som spänner mellan ELLER över följande.
Start-> 2005-01-01 07:00 End -> 2005-01-02 : 13:00
Kanske fel forum men detta kan ju även gälla frågor mot dataset.Sv: Hitta poster som spänner över eller mellan två datum.
Sv:Hitta poster som spänner över eller mellan två datum.
Select * From DB Where Datum Between '2005-05-05 13:00:00' And '2005-05-05 15:00:00'
#Tar ut alla poster där datumet är den 5 maj mellan kl 13 och 15.
Select * From DB Where Datum < '2005-05-05 13:00:00' And Datum > '2005-05-05 15:00:00'
#Tar ut alla poster utom där datumet är den 5 maj mellan kl 13 och 15.
Sen kan man leka vidare ytterligare. Specificera dig vad ditt problem är så kanske vi kan hjälpa dig. :)Sv: Hitta poster som spänner över eller mellan två datum.
Du har två datum, A och B?
Du vill ha ut alla datum mellan A och B, och alla över A och B?
Då är det väl bara att ta alla över A?Sv:Hitta poster som spänner över eller mellan två datum.
((startDate between '2005-01-01 07:00' and '2005-01-01 16:00')
or
(endDate between '2005-01-02 07:00' and '2005-01-02 16:00'))Sv: Hitta poster som spänner över eller mellan två datum.
Två intervall (start1, end1), (start2, end2) överlappar om och endast om
GREATEST(start1, start2) < LEAST(end1, end2)Sv:Hitta poster som spänner över eller mellan två datum.
.........A..............B........
1 |--|
2 |--------|
3 |-----------------------|
4 |---|
5 |-------------|
6 |--------|
.........A..............B........
Om jag tolkar frågan rätt så vill han ha datumen 3 och 4 ovan. Hoppas "ascii-grafiken" ser ok ut (det är ju annars din specialitet Niklas :-).Sv: Hitta poster som spänner över eller mellan två datum.
I fallet nedan söker jag alla som spänner över och mellan A och B.
Alltså 2,3,4,5.
.........A..............B........
1 |--|
2 |--------|
3 |-----------------------|
4 |---|
5 |-------------|
6 |--------|
.........A..............B........ Sv:Hitta poster som spänner över eller mellan två datum.
1 Startdatumet skall ligga mellan A och B
ELLER
2 Slutdatumet skall ligga mellan A och B
ELLER
3 Startdatumet skall vara före A OCH slutdatumet skall vara efter B
Då borde det bli ungefär så här (pseudo) :
SELECT * FROM [table] WHERE (Start BETWEEN A AND B) OR (Stopp BETWEEN A AND B) OR (Start<A AND Stopp>B)
Det går ju också att vända på det hela och plocka bort alla intervall som ligger före A alternativt efter B.
SELECT * FROM [table] WHERE NOT ((Start<A AND Stopp<A) OR (Start>B AND Stopp>B))
Vilken av dessa som är bäst får någon annan svara på.Sv:Hitta poster som spänner över eller mellan två datum.
Sv: Hitta poster som spänner över eller mellan två datum.
<CODE>
SELECT * FROM Tabell WHERE StartDatum < B AND SlutDatum > A
</CODE>Sv:Hitta poster som spänner över eller mellan två datum.
SELECT *
FROM Tabell
WHERE GREATEST(StartDatum, #2005-01-01 07:00#) < LEAST(SlutDatum, #2005-01-02 : 13:00#)
Sv:Hitta poster som spänner över eller mellan två datum.
Precis. Det är ju exakt det som jag skrev först av allt, fast i aningen enklare form. Den kanske är enklare att förstå ifall man skriver exakt som jag sa:
SELECT * FROM Tabell WHERE NOT (StartDatum >= B OR SlutDatum <= A)Sv: Hitta poster som spänner över eller mellan två datum.
Men överlappar vad? A? B? A och B? A eller B? Ditt svar säger ju ingenting förrän du definierar "överlappar", vilket var exakt skälet till att frågan var otydlig. Tydligare frågor och tydligare svar efterlyses!!!!
[Edit: Skulle ha läst hela din fråga och inte bara den delen du citerade. Såg att du faktiskt definierade "överlappa". Sorry...nu ska jag vara tyst :-)]Sv:Hitta poster som spänner över eller mellan två datum.
(Och vad sjutton är "A" och "B"?)