Datum/Zeitwerte unter Sqlite

Gelegentlich gab es Probleme beim Aktualisieren von Datumswerten – z.B. beim manuellen Ändern von Depotdaten.

Geänderte Werte wurden vermeintlich nicht aktualisiert.

Das Problem liegt an der Art und Weise, wie Sqlite Datum-/Zeitwerte speichert.

Da trAAAde in manchen Fällen den Datumswert als Schlüsselfeld verwendet, muss sichergestellt werden, dass beim Update der passende Datensatz lokalisiert werden kann. Bei Datumswerten ist dies nicht ganz trivial. Die einfachste Variante wäre, das Datum nur als Ganzzahl zu speichern (Datentyp DATE), allerdings könnte dies zu Schlüsselverletzungen führen, wenn für ein Datum mehrfach dieselbe Aktion durchgeführt wurde. Wird das Feld als Datentyp DATETIME deklariert kann höher aufgelöst werden, da auch die Uhrzeit mit der Aktion gespeichert werden kann.

Eine Eigenart von Sqlite ist, dass der Zeitanzeil nur dann ausgegeben wird, wenn er Ungleich 12:00:00 Uhr und ungleich 00:00:00 Uhr ist.

12 Uhr bedeutet, dass der zugrundeliegende Zahlenwert ganzzahlig ist. 0 Uhr bedeutet, dass es eben 0 Uhr ist oder war.

Dies wirft die Problematik auf, dass Datensätze hier nicht eindeutig lokalisiert werden können.

Im Normalfall sollte mit dieses SQL Statements alles greifbar sein:

UPDATE …. SET … WHERE rate = 1 and date = ‚31.12.2012‘

wenn keine Uhrzeit mit dem Datenwert angegeben ist.

UPDATE …. SET … WHERE rate = 1 and date = ‚31.12.2012 12:59:00‘

wenn eine Uhrzeit mit angegeben ist.