Frage zu SQLite mit Datum rechnen

Deuteros

Cadet
Mitglied seit
23.05.2002
Beiträge
45
Renomée
2
Standort
Norddeutschland
Hallo liebe Gemeinde.

Ich wollte mir für die Arbeit mal eine kleine Erleichterung programmieren,bin aber seit fast 15 Jahren raus aus der Materie.
Umsetzen wollte ich es mit SQLite und Lazarus. In Lazarus muss ich mich auch erst mal reinfinden, meine damalige Zeit hab ich mit Delphi 7 gearbeitet,
und die neue Delphi Community Version kann ich für das Arbeitsprojekt aus Lizenztechnischen Gründen nicht gebrauchen.

Es geht um folgendes Problem:
In gewissen Zyklen müssen von diversen E-Anlagen die Akkus getauscht werden. USV's diverse 24V Backups usw. usw.
Bei Verschiedenen Anlagen sind die Tauschzyklen der Batterien aber unterschiedlich. PC USV's werden bei uns z.B.: alle 2 Jahre gewechselt, Notstromgeneratoren teils 5-7Jahre
(Abhängig vom Akku/Batterie Typ)

Ein Aufruf von

SELECT * FROM AKKU WHERE Akkutauschdatum < Date('NOW','-2 year')

würde dem nicht gerecht werden. Es wäre also nötig das die Select Anfrage den nötigen Tauschintervall des AKKUs berücksichtigt.
Der steht in einem Eintrag "Akkuzyklus" als Integer. 2 für 2 Jahre oder 4 für 4 Jahre.
Wie bekomme ich es in der SQL Abfrage hin,das er diese Werte in der SELECT berücksichtigt? Ich bekomm es irgendwie nicht hin (Syntax Technisch)
Rumtesten tue ich derzeit mit SQLite Administrator 0.8.3.2 aus dem Jahre 2008. Das hatte ich hier zu liegen und wollte es zum experimentieren erst mal nehmen.
Einfach vom Aufbau und hat nicht viel Ballast.

Ich bräuchte sowas wie

SELECT * FROM AKKU WHERE Akkutauschdatum < Date('NOW','- Akkuzyklus year')

Ist vermutlich marginal,aber ich finde die Lösung nicht so recht, da viel zu lange auf Abstinenz im Programmieren.

Hat das vielleicht jemand eine Lösung für mich??

Ich bedanke mich schon einmal im vorraus

Cya de Helge
 
Falls du noch keine Lösung gefunden hast:

SQL:
-- Beispieltabelle zur Veranschaulichung
CREATE TABLE AKKU_TAUSCH (
    NAME VARCHAR PRIMARY KEY,
    LAST_CHANGED TIMESTAMP,
    CHANGE_INTERVAL NUMBER
);

-- Abfrage für alle Akkus bei denen das Tauschintervall erreicht oder überschritten wurde:
SELECT * FROM AKKU_TAUSCH AT
WHERE AT.LAST_CHANGED <= datetime(CURRENT_TIMESTAMP, '-' || AT.CHANGE_INTERVAL || ' year');

-- oder
SELECT * FROM AKKU_TAUSCH AT
WHERE CURRENT_TIMESTAMP >= datetime(AT.LAST_CHANGED, '+' || AT.CHANGE_INTERVAL || ' year')

Mit dem Concat-Operator ist es einfach den Wert für den Akku-Zyklus in den Modifier für DateTime zu integrieren.

 
Zuletzt bearbeitet:
Hallo Hammerhead Shark,

Nein, ich hatte die Geschichte erst einmal pausiert und noch keine Lösung dazu.
Auf Arbeit ist grade Jahresendspurt, da fehlte mir Abends irgendwie die Lust ;)
Ich werde es mal Wochenende bzw. die Tage probieren, obs klappt.
Jedenfalls scheinen die beiden || vielleicht die Lösung zu sein, die hatte ich bisher nicht drin.
Ich sage erst einmal Dankeschön und melde mich nochmal zurück, wenn es geklappt hat.

Cya de Helge

P.S.: Ich konnte es nicht abwarten und habs gleich mal getestet :) Was soll ich sagen, es funktioniert.
Wahnsinn was || in der Syntax so ausmachen können, war beim damaligen experimentieren dicht dran, aber doch etwas daneben.
Also vielen Dank nochmal... Jetzt hab ich einen Ansatz auf dem ich weiter aufbauen kann.
 
Zuletzt bearbeitet:
Zurück
Oben Unten