Zvoni
Erfahrenes Mitglied
Mir war langweilig.......
Spalten:
FromDate ("VonDatum")
ToDate ("BisDatum")
Ich prüfe nicht, ob Bis grösser Von ist... Problem des Anwenders....
Ich prüfe auch nicht, ob die Felder NULL sind.... könnte man aber noch einbauen mit einem COALESCE
P.S.: Die Date-Funktion von SQLite arbeitet mit UTC. Wer local time braucht, muss Zeile 31 ändern
von:
Date(FromDate,'start of month','+1 months','-1 day')
In:
Date(FromDate,'localtime','start of month','+1 months','-1 day')
Spalten:
FromDate ("VonDatum")
ToDate ("BisDatum")
Ich prüfe nicht, ob Bis grösser Von ist... Problem des Anwenders....
Ich prüfe auch nicht, ob die Felder NULL sind.... könnte man aber noch einbauen mit einem COALESCE
SQL:
SELECT
(CASE CAST(strftime('%m',ToDate) AS INT)<CAST(strftime('%m',FromDate) AS INT) OR
(CAST(strftime('%m',ToDate) AS INT)=CAST(strftime('%m',FromDate) AS INT) AND
CAST(strftime('%d',ToDate) AS INT)<CAST(strftime('%d',FromDate) AS INT))
WHEN TRUE
THEN
CAST(strftime('%Y',ToDate) AS INT)-CAST(strftime('%Y',FromDate) AS INT)-1
ELSE
CAST(strftime('%Y',ToDate) AS INT)-CAST(strftime('%Y',FromDate) AS INT)
END) AS Years,
(CASE WHEN CAST(strftime('%m',ToDate) AS INT)<CAST(strftime('%m',FromDate) AS INT)
THEN
CASE WHEN CAST(strftime('%d',ToDate) AS INT)<CAST(strftime('%d',FromDate) AS INT)
THEN CASE WHEN 12+CAST(strftime('%m',ToDate) AS INT)-CAST(strftime('%m',FromDate) AS INT)=0
THEN 11
ELSE 11+CAST(strftime('%m',ToDate) AS INT)-CAST(strftime('%m',FromDate) AS INT)
END
ELSE 12+CAST(strftime('%m',ToDate) AS INT)-CAST(strftime('%m',FromDate) AS INT)
END
ELSE
CASE WHEN CAST(strftime('%d',ToDate) AS INT)<CAST(strftime('%d',FromDate) AS INT)
THEN CASE WHEN CAST(strftime('%m',ToDate) AS INT)-CAST(strftime('%m',FromDate) AS INT)=0
THEN 11
ELSE CAST(strftime('%m',ToDate) AS INT)-CAST(strftime('%m',FromDate) AS INT)-1
END
ELSE CAST(strftime('%m',ToDate) AS INT)-CAST(strftime('%m',FromDate) AS INT)
END
END) AS Months,
(CASE WHEN CAST(strftime('%d',ToDate) AS INT)>=CAST(strftime('%d',FromDate) AS INT)
THEN CAST(strftime('%d',ToDate) AS INT)-CAST(strftime('%d',FromDate) AS INT)
ELSE CAST(strftime('%d',ToDate) AS INT)+(CAST(strftime('%d',Date(FromDate,'start of month','+1 months','-1 day')) AS INT)-CAST(strftime('%d',FromDate) AS INT))
END) AS Days
FROM EineTablle
P.S.: Die Date-Funktion von SQLite arbeitet mit UTC. Wer local time braucht, muss Zeile 31 ändern
von:
Date(FromDate,'start of month','+1 months','-1 day')
In:
Date(FromDate,'localtime','start of month','+1 months','-1 day')
Zuletzt bearbeitet: