![]() |
Datenbank: SQLite • Version: 3.x • Zugriff über: native
SQLite SQL für Alter anzeigen gibt Null zurück
Liste der Anhänge anzeigen (Anzahl: 1)
Moin,
Das nachfolgend Script soll das Alter eines Datums anzeigen. Ich bekomme keinen Kopf daran warum ich bei dem SQLite Script immer NULL zurück bekomme. Wo ist mein Fehler? 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 END AS Age FROM test; |
AW: SQLite SQL für Alter anzeigen gibt Null zurück
Wahrscheinlich weil date(Gebdate) NULL ist.
SQLite interessiert sich nicht wirklich für Typen. Trag Gebdate mal als "1954-11-11" anstatt als "11.11.1954" in die Tabelle ein |
AW: SQLite SQL für Alter anzeigen gibt Null zurück
Ich glaube nicht, wenn du das Zeige_Alter.sql ausführst sind die Felder gefüllt.
GebDatum wird in der Spalte angezeigt Siehe Result_Null.png Ich vermute ein Fehler im Script finde ihn aber nicht. |
AW: SQLite SQL für Alter anzeigen gibt Null zurück
Du hast mich auf eine Idee gebracht und es muß tatsächlich etwas mit dem Wert zutun haben.
Denn wenn ich nur den Wert zerlege kommt auch nur NULL zurück. SELECT name, GebDate, strftime('%Y', date('GebDate')), strftime('%m', date('GebDate')), strftime('%d', date('GebDate')) from test |
AW: SQLite SQL für Alter anzeigen gibt Null zurück
Wie gesagt, trag das Datum mal als "yyyy-mm-dd" ein, dann gehts auch.
|
AW: SQLite SQL für Alter anzeigen gibt Null zurück
Liste der Anhänge anzeigen (Anzahl: 1)
Die Schreibweise hat keinen Einfluß.
Aber es muß etwas mit dem Datumsfeld zutun haben, denn now kann ich testweise zerlegen aber Gebdatum nicht. Da kommt auch immer NULL zurück. Ich habe keine Ahnung was hier schief läuft. SELECT name, strftime('%Y', date('now'))as NowDate, GebDate, strftime('%Y', date('GebDate')), strftime('%m', date('GebDate')), strftime('%d', date('GebDate')) from test |
AW: SQLite SQL für Alter anzeigen gibt Null zurück
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm..
|
AW: SQLite SQL für Alter anzeigen gibt Null zurück
Code:
nicht
STRFTIME('%Y', GebDate)
Code:
STRFTIME('%Y', DATE(GebDate))
|
AW: SQLite SQL für Alter anzeigen gibt Null zurück
SQL-Code:
Wozu überhaupt das innere CASE?
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; 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; |
AW: SQLite SQL für Alter anzeigen gibt Null zurück
SQLite hat zwar Datentypen, aber keine Prüfung darauf + intern wird alles als String gespeichert. Dein GebDat wird zwar ein Datum enthalten, aber es wird unterschiedliches Format aufweisen. Dehalb wird die Konvertierung manchmal fehlschlagen.
Prüfe mal, was tatsächlich in GebDat drinsteht + ob das immer als gültiges (für die Konvertierung!) Datum erkannt wird. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz