![]() |
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. |
AW: SQLite SQL für Alter anzeigen gibt Null zurück
SQL-Code:
Ich glaube auch, dass in deinem ursprünglichen Statement, die Gänsefüßchen um GebDate nicht richtig sein können, bzw. es wird so versucht aus dem String "GebDate" ein Datum zu machen, was logischerweise nicht geht.
strftime('%Y', date('GebDate')),
|
Abgeschlossen und Danke SQLite SQL für Alter anzeigen gibt Null zurück
Abgeschlossen und Danke
Danke für eure Unterstützung. Mein Fazit: Mein SQL Script funktioniert die Ursache lag tatsächlich in der Schreibweise des Datums "YYYY-MM-DD". Wenn DBDatetimepicker uä. Komponenten verwendet werden, ändern diese Komponeten das eingetragene Datum von "dd.mm.yyyy" in "YYYY-MM-DD". Daher habe ich das so nicht wahrgenommen. Erst nach dem Tabellen per Batchjob mit "dd.mm.yyyy" übertragen wurden passierte das Missgeschick. Normalerweise bewege ich mich im MS SQL Serverumfeld und dort kann das Format auf Datenbankebene mit einem Countrycode (set language german/SET DATEFORMAT) vorgesteuert werden. Auf SQLite.org habe ich eine solche Option noch nicht gefunden. Danke nochmal an alle. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:13 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-2025 by Thomas Breitkreuz