Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
Delphi 12 Athens
|
AW: SQLite SQL für Alter anzeigen gibt Null zurück
25. Nov 2022, 16:06
SQL-Code:
SELECT
name,
GebDate,
strftime('%Y', date('now')),
strftime('%m', date('now')),
strftime('%d', date('now')),
CASE
WHEN strftime('%m', date('now')) > strftime('%m', date(GebDate)) THEN
strftime('%Y', date('now')) - strftime('%Y', date(GebDate))
WHEN strftime('%m', date('now')) = strftime('%m', date(GebDate)) THEN
CASE
WHEN strftime('%d', date('now')) >= strftime('%d', date(GebDate)) THEN
strftime('%Y', date('now')) - strftime('%Y', date(GebDate))
ELSE
strftime('%Y', date('now')) - strftime('%Y', date(GebDate)) - 1
END
WHEN strftime('%m', date('now')) < strftime('%m', date(GebDate)) THEN
strftime('%Y', date('now')) - strftime('%Y', date(GebDate)) - 1
ELSE ... -- dieses ELSE gibt es nicht, also NULL <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
END AS Age
FROM test;
Wozu überhaupt das innere CASE?
Weil Code zu unübersichtlich und nicht bemerkt?
außerdem ist es unnötig unübersichtlich, da Vieles doppelt/mehrfach vorkommt.
SQL-Code:
SELECT
name,
GebDate,
strftime('%Y', date('now')),
strftime('%m', date('now')),
strftime('%d', date('now')),
strftime('%Y', date('now')) - strftime('%Y', date(GebDate))
- CASE
WHEN strftime('%m', date('now')) > strftime('%m', date(GebDate)) THEN
0
WHEN strftime('%m', date('now')) = strftime('%m', date(GebDate)) THEN
CASE
WHEN strftime('%d', date('now')) >= strftime('%d', date(GebDate)) THEN
0
ELSE
-1
END
WHEN strftime('%m', date('now')) < strftime('%m', date(GebDate)) THEN
-1
ELSE
0 -- neues/fehlendes ELSE --> irgendwas - NULL = NULL
END AS Age
FROM test;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
Geändert von himitsu (25. Nov 2022 um 16:12 Uhr)
|