Hi,
DBvon DBbis
von bis
von bis
von bis
von bis
von bis
von bis
von bisund so weiter. DBvon und DBbis sind deine beiden Werte aus dem DBMS, 'von' und 'bis' die beiden Daten des Prüflings.
Ist es lt. Deiner Tabelle nicht genau umgekehrt?
von bis sind die Tabellenzeilen und DBvon DBbis ist der zu prüfende Datumszeitraum.
In der ersten Zeile sind beide Daten vor dem DBvon-Datum, in der zweiten fällt das 'bis' mit dem DBvon zusammen, in der dritten liegt das 'bis' zwischen DBvon und DBbis. Soweit hoffe ich, sollte das klar sein.
Ja. Und zwar, egal, wie herum ich das betrachte.
Nun formulierst du die Bedingungen und das gewünschte Ergebnis je Zeile
So weit, so gut.
Ich habe folgende Tabelle:
CREATE TABLE liste (
ID int(6) NOT NULL AUTO_INCREMENT,
von_Datum date NOT NULL,
bis_Datum date NOT NULL,
PRIMARY KEY (ID)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO liste (ID, von_Datum, bis_Datum) VALUES
(1, '2011-11-28', '2012-02-26'),
(2, '2011-11-28', '2012-02-12'),
(3, '2011-11-29', '2012-02-20'),
(4, '2011-11-28', '2012-02-26'),
(5, '2011-11-28', '2012-02-26'),
(6, '2011-11-30', '2012-02-26'),
(7, '2012-01-02', '2012-02-28'),
(8, '2012-01-01', '2012-02-28'),
(9, '2012-01-03', '2012-02-28'),
(10, '2011-12-01', '2012-02-29'),
(11, '2011-12-05', '2012-02-29'),
(12, '2011-12-05', '2012-02-29'),
(13, '2011-12-10', '2012-03-09'),
(14, '2011-12-10', '2012-03-09'),
(15, '2011-12-10', '2012-03-09'),
(16, '2011-11-27', '2012-03-09'),
(17, '2011-12-12', '2012-03-09'),
(18, '2011-12-12', '2012-03-09'),
(19, '2011-12-10', '2012-03-09');
Mit dieser Query, die den Zeitraum 30.11.2011 bis 02.12.2011 prüfen soll, erhalte ich nun genau das Gegenteil dessen, was ich möchte:
SELECT ID
FROM liste
WHERE (
CASE
WHEN bis_Datum < '2011-11-30'
THEN 1
WHEN von_Datum > '2011-12-02'
THEN 1
END
)
Ergebniss:
ID
7
8
9
11
12
13
14
15
17
18
19
Wie formuliere ich das denn richtig? Ich möchte tatsächlich alle Zeilen, die irgendeine Schnittmenge mit dem Prüfzeitraum aufweisen.
Jens