siro: MySQL - ungültige Daten nicht korrigieren

Hallo Welt.

Ich hatte die Idee, in Datenfeldern bei denen der Tag unwichtig oder unbekannt ist für den Tag '00' zu speichern ( z.B. 00.01.2004 stellvertretend für 'irgendwann im Januar 2004' ). Leider setzt MySQL beim Speichern das ganze Datum automatisch auf 0.
Meine MySQL-Referenz konnte mir auch nicht weiterhelfen. Dort wurde es sogar empfohlen, das so zu machen.
Kann man die Überprüfung des Datums umgehen oder muss ich doch ein zusätzliches Feld anlegen?

MfG _Siro

  1. Hello,

    Kann man die Überprüfung des Datums umgehen oder muss ich doch ein zusätzliches Feld anlegen?

    Mehrere Wege führen nach Rom...

    Du musst beim Anlegen der Dateistruktur darüber nachdenken, in welcher Form die Daten atomar sind. Wenn ein Datum immer nur als vollständiges und gültiges Datum benötigt wird, dann ist es auch in dieser Form atomat. Wenn das Datum allerdings aus einer Datengruppe besteht, deren Werte auch einzeln Relevanz besitzen und getrennt voneienander verändert werden dürfen, dann musst Du entwprechend viele Einzeldatenfelder daraus machen. Das erhöht natürlich den Aufwand bei der Datumsüberprüfung und der Arbeit damit. Mann muss es dann ja immer mit der datumsfunktion erst zusammenbauen.

    Und wenn ich da bei MySQL schaue, finde ich gar keine Funktion, mit der man das Datum aus Jahr, Monat, Tag zusammensetzen kann, um damit zu arbeiten (zu rechnen). Aber wahrscheinlich funktioniert das ganz automatisch, wenn der String richtig concatiniert übergeben wird.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
  2. yo,

    Kann man die Überprüfung des Datums umgehen oder muss ich doch ein zusätzliches Feld anlegen?

    die überprüfung kann man meines wissens nicht umgehen. aber mit einem kleinen trick kannst du vielleicht dein ziel erreichen. nimm einfach ein jahr, dass mit sicherheit nicht betroffen ist, zum beispiel für 2004 das jahr 3004 oder 1004. den tag setzt du einfach auf 1 und der monat halt der gewünschte.

    so kann zum beispiel 01.02.1004 bedeuten, irgendwann im februar 2004. dass nur noch im programm-code implementieren und man spart sich ein zusätzliches feld. wobei eigentlich nur eine flag spalte zusätzlich gebraucht wird, also auch nicht die welt kostet.

    Ilja

  3. Hallo Welt.

    Danke für eure Antworten.

    Ich habe jetzt herausgefunden, woran es lag. Es hängt vom Datumstyp ab. Mit date und datetime scheint es zu funktionieren, wohingegen timestamp automatisch auf 0 gesetzt wird, da es dort keinen 0. Tag gibt. In meiner Referenz wurde da leider nicht unterschieden.

    MfG _Siro