Datenfeldüberschneidung
Andi
- datenbank
Hallo,
ich habe n Daten in einer DB.
Ich möchte nun, dass sich die Daten nicht überschneiden.
Bsp.:
01/02/2005 - 31/02/2005
01/03/2005 - 31/03/2005
14/02/2005 - 16/02/2005
Hier würden sich 2 Datenfelder miteinander überschneiden. Wie kann ich das abfragen, ob sich die Datenfelder überschneiden.
Wäre für eine Denkanstoß dankbar.
Gruß
Andi
Hi Anidi,
01/02/2005 - 31/02/2005
01/03/2005 - 31/03/200514/02/2005 - 16/02/2005
ich versteh nicht ganz aof was du hinauswillst aber vll könnte dir ORDER BY helfen.
MfG
Hi Anidi,
01/02/2005 - 31/02/2005
01/03/2005 - 31/03/200514/02/2005 - 16/02/2005
ich versteh nicht ganz aof was du hinauswillst aber vll könnte dir ORDER BY helfen.
Nein leider nicht. Es darf sich nichts überschneiden.
Machen wir ein Zahlenbeispiel:
1-5
6-10
Überschneidet sich nicht
1-5
2-3
Überschneidet sich
Gruß
Andi
Hi,
was ist denn das für ein Datentyp mit dem du diese Felder speicherst? Sind das zwei Datumsfelder oder einfacher Text?
MfG
Rouven
was ist denn das für ein Datentyp mit dem du diese Felder speicherst? Sind das zwei Datumsfelder oder einfacher Text?
Das sind Datumsfelder.
Gruß
Andi
Hallo,
suchst Du so etwas:
DB:
TABELLE TEST:
VON_WERT BIS_WERT
01.01.2004 31.01.2004
01.02.2004 29.02.2004
Dann bekommst Du die Zwischenprüfung über:
SELECT count (*)
FROM test
WHERE
-- Vergleichswert von liegt in den Datumswerten
(von_wert < TO_DATE(von_vrgl,'DD.MM.YYYY') AND
bis_wert > TO_DATE(von_vrgl,'DD.MM.YYYY')) OR
-- Vergleichswert bis liegt in den Datumswerten
(von_wert < TO_DATE(bis_vrgl,'DD.MM.YYYY') AND
bis_wert > TO_DATE(bis_vrgl,'DD.MM.YYYY')) OR
-- Vergleichswerte "umaren" DB-Werte
(von_wert > TO_DATE(von_vrgl,'DD.MM.YYYY') AND
bis_wert < TO_DATE(bis_vrgl,'DD.MM.YYYY'))
Habe ich jetzt so nicht getestet, sollte aber funktionieren.
Grüsse aus Aachen
Marko
Hallo,
suchst Du so etwas:
DB:
TABELLE TEST:
VON_WERT BIS_WERT
01.01.2004 31.01.2004
01.02.2004 29.02.2004Dann bekommst Du die Zwischenprüfung über:
SELECT count (*)
FROM test
WHERE
-- Vergleichswert von liegt in den Datumswerten
(von_wert < TO_DATE(von_vrgl,'DD.MM.YYYY') AND
bis_wert > TO_DATE(von_vrgl,'DD.MM.YYYY')) OR
-- Vergleichswert bis liegt in den Datumswerten
(von_wert < TO_DATE(bis_vrgl,'DD.MM.YYYY') AND
bis_wert > TO_DATE(bis_vrgl,'DD.MM.YYYY')) OR
-- Vergleichswerte "umaren" DB-Werte
(von_wert > TO_DATE(von_vrgl,'DD.MM.YYYY') AND
bis_wert < TO_DATE(bis_vrgl,'DD.MM.YYYY'))Habe ich jetzt so nicht getestet, sollte aber funktionieren.
Hi,
also ich habe jetzt selbst ein bischen gebastelt:
SELECT count(*)
FROM test
WHERE 'wertZuTesten' BETWEEN DATUM1 AND DATUM2
Wenn ich jedes neue Datum mit dieser Abfrage teste dann wird immer ein richtiges Datum enthalten sein.
Manchmal sieht man den Wald vor lauter ...
Gruß
Andi
Hi,
wow... wenn, du das für jeden möglichen Wert (Datensatz) in deiner Tabelle machst, nachdem er drin steht, erzeugst du aber massig Verkehr.
Du solltest den einzutragenden Wert überprüfen, bevor du ihn einträgst.
Ciao, Frank
Hello,
01/02/2005 - 31/02/2005
01/03/2005 - 31/03/2005
Wo überschneiden die sich denn?
Da es den 31.03.2005 nicht gibt, sehe ich da kein Problem ;-))
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
01/02/2005 - 31/02/2005
01/03/2005 - 31/03/2005Wo überschneiden die sich denn?
Da es den 31.02.2005 nicht gibt, sehe ich da kein Problem ;-))
Mein Arbeitsplatrechner hat da allerdings schon Probleme gesehen *gg*
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
wie fein muss denn die Auflösung sein? Immer eine Tag?
Einen Binaray Index gibt es bei MySQL meines Wissens nicht. Aber durch ein spezielles Statement beim Einfügen könntest Du das bestimmt regeln.
Du benötigst ein 46 Byte langes Feld, in dem für jeden benutzten Tag ein Bit gespeichert wird. Das kannst Du dann beim Einfügen mit dem neuen Wert ver-unden und es darf kein True dabei herauskommen.
Oder aber, du führst eine vernünftige Normalisierung durch.
In einer zweiten Tabelle speicherst Du für jeden Tag einen related record. Wenn Du nun abfragst, darf es eben keine Überschneidungen geben.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom