Mit Datum und Zeit rechnen in SQLite – strftime und date()
SQLite hat keinen echten Datumstyp – Zeitangaben sind Text oder Zahlen. Mit den eingebauten Funktionen date(), datetime() und strftime() gruppierst du trotzdem nach Monat, rechnest Tage dazu und formatierst sauber. Ich zeige die Muster, die ich ständig brauche.
SQLite hat bewusst keinen eigenen Datumstyp – du speicherst Zeit als ISO-Text (2026-07-21 14:00:00) oder als Zahl. Damit rechnen kannst du trotzdem bequem, dank der eingebauten Datumsfunktionen. Voraussetzung: Speichere Zeitstempel immer im ISO-Format, dann klappt alles.
Das Jetzt und einfache Umformung
SELECT date('now'); -- 2026-07-21
SELECT datetime('now', 'localtime'); -- lokale Zeit statt UTC
SELECT date('now', '-7 days'); -- vor einer Woche
SELECT date('now', 'start of month');-- erster Tag des MonatsDie Modifikatoren wie '-7 days' oder 'start of month' hängst du einfach an – so rechnest du Zeiträume ohne Klimmzüge.
Nach Monat gruppieren mit strftime
strftime(format, zeit) formt einen Zeitstempel nach deinem Muster um. Damit gruppierst du z. B. Umsätze pro Monat:
SELECT
strftime('%Y-%m', erstellt) AS monat,
SUM(betrag) AS umsatz
FROM bestellungen
GROUP BY monat
ORDER BY monat;%Y-%m erzeugt „2026-07" – über diese Textspalte gruppierst du dann. Weitere nützliche Platzhalter: %d (Tag), %H:%M (Uhrzeit), %w (Wochentag 0–6).
Nur Einträge von heute
SELECT * FROM ereignisse
WHERE date(erstellt) = date('now');date(erstellt) schneidet die Uhrzeit ab, sodass du sauber auf den Tag vergleichst.
Alter oder Differenz in Tagen
Über das Julianische Datum bekommst du Differenzen als Zahl:
SELECT julianday('now') - julianday(erstellt) AS tage_alt
FROM konten;Wichtig fürs Sortieren
Weil ISO-Zeitstempel als Text schon chronologisch sortieren (2026-07 < 2026-08), funktioniert ORDER BY erstellt korrekt – ein guter Grund, konsequent das ISO-Format zu speichern.
Wenn du Auswertungen mit Zeitbezug (Tages-, Monatsstatistiken) auf einer SQLite-Datenbank brauchst, baue ich dir das – meld dich über bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
Laufende Summe in SQL – SUM() OVER statt Schleife in der Anwendung
Kontostand nach jeder Buchung, kumulierter Umsatz im Jahr, Restbestand nach jeder Entnahme: Alles dieselbe Frage. Mit einer Fensterfunktion beantwortet die Datenbank sie in einer Abfrage – inklusive gleitendem Durchschnitt.
NULL in SQL – warum COUNT(spalte) lügt und wo die leeren Werte landen
NULL ist kein Wert, sondern die Abwesenheit eines Werts. Deshalb zählt COUNT(spalte) anders als COUNT(*), summiert SUM() an leeren Zeilen vorbei und landen beim Sortieren alle Lücken am selben Ende.
Wie viel mehr als gestern? Differenz zur Vorzeile mit LAG() in SQL
„Wie viele Besucher heute im Vergleich zu gestern?" – der Reflex ist ein Self-Join auf die Vorzeile. Mit der Fensterfunktion LAG() bekommst du den Wert der vorherigen Zeile direkt daneben, ohne die Tabelle ein zweites Mal anzufassen.