🙏 Helfen Sie jetzt mit, unser LibreOffice Forum zu erhalten! 🙏
Mit Ihrer Spende sichern Sie den Fortbestand, den Ausbau und die laufenden Kosten dieses Forums. 🌱

🍀 Jeder Beitrag zählt – vielen Dank für Ihre Unterstützung!🍀

❤️ DANKE >> << DANKE ❤️

>> Dank Ihrer Unterstützung -> Keine Werbung für alle registrierten LibreOffice-Forum User! <<
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

Altr berechnen, SQL Fehler?

Base ermöglicht es Ihnen, Ihre Daten in einer Datenbank direkt mit LibreOffice zu bearbeiten.
Antworten
suwo
Beiträge: 94
Registriert: Sa 12. Mär 2011, 10:40

Altr berechnen, SQL Fehler?

Beitrag von suwo » Do 3. Apr 2014, 18:05

Hallo zusammen.
Ich habe eine Personengruppe mit Geburtsdatum. Hier möchte ich das Alter berechnen. Sollte genau sein, da ich nachher in einem Bericht den Altersdurchschnitt berechnen will. Ich habe auf der Seite http://www.computerwissen.de/office/ope ... -base.html sowie im Handbuch nachgeschlagen. Aber irgendwie rechnet die Abfrage nicht. Kann mit jemand den Fehler zeigen?

Danke im vorraus,

Suwo
Dateianhänge
Geburtstag_Alter.odb.zip
(17.34 KiB) 248-mal heruntergeladen

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Altr berechnen, SQL Fehler?

Beitrag von RobertG » Do 3. Apr 2014, 18:19

Hallo Suwo,

Du hast bei Datediff die Spalte vergessen, die darauf verweist, dass die Differenz der Jahreszahl berechnet werden soll.

Code: Alles auswählen

 DATEDIFF( 'YY',"Geburtstag", CURDATE( ) )
geht. Bringt dann aber nur den Unterschied im Datum zwischen z.B. 2014 und 2013 als 1 Jahr.
Jetzt zusammen mit der Version aus dem Handbuch, die auch bei Schaltjahren noch funktioniert:

Code: Alles auswählen

SELECT "Name", "Vorname", "Geburtstag", CASE WHEN MONTH( "Geburtstag" ) > MONTH( CURDATE( ) ) THEN DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) - 1 WHEN ( MONTH( "Geburtstag" ) = MONTH( CURDATE( ) ) AND DAY( "Geburtstag" ) > DAY( CURDATE( ) ) ) THEN DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) - 1 ELSE DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) END AS "Alter" FROM "Geburtstag"
Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

suwo
Beiträge: 94
Registriert: Sa 12. Mär 2011, 10:40

Re: Altr berechnen, SQL Fehler?

Beitrag von suwo » Do 3. Apr 2014, 20:22

Hallo.
'yy' habe ich bewußt weggelassen, weil ich gerne das genaue Alter hätte. Das heißt: Ist jemand am 31.03.2000 geboren ist er so 14 Jahre alt. Genaugenommen aber 14 Jahre und 3 Tage. Eine Kommazahl würde ja genügen. Ich bin davon ausgegangen, dass Base genau wie Calc intern mit ganzen Zahlen rechnet (01.01.2014 wäre dann 41640).

mfg,

Suwo

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Altr berechnen, SQL Fehler?

Beitrag von RobertG » Fr 4. Apr 2014, 13:20

Hallo Suwo,

ein Datum wird in Datenbanken nicht als Zahlenwert gespeichert. Es ist direkt ein Zugriff auf Jahr, Monat und Tag möglich. Du kannst natürlich die Differenz in Tagen insgesamt ausrechnen oder die Differenz zum letzten Geburtstag. Dann bliebe nur noch die Unwägbarkeit mit dem Schaltjahr.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

suwo
Beiträge: 94
Registriert: Sa 12. Mär 2011, 10:40

Re: Alter berechnen, SQL Fehler?

Beitrag von suwo » Fr 4. Apr 2014, 18:57

Hallo.

Tappe gerade im Dunkeln. Ich habe eine neue Spalte eingefügt: CURDATE( ) - "Geburtstag". Das klappt aber nicht.

mfg,

Suwo

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Alter berechnen, SQL Fehler?

Beitrag von RobertG » Fr 4. Apr 2014, 19:15

Hallo Suwo,
suwo hat geschrieben: Tappe gerade im Dunkeln. Ich habe eine neue Spalte eingefügt: CURDATE( ) - "Geburtstag". Das klappt aber nicht.
Du versuchst von einem Datum ein anderes zu subtrahieren. Ein Datum wird aber als Datum verwaltet.
DATEDIFF('dd',"Geburtstag",CURDATE()) gibt Dir den Unterschied in Tagen an.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Altr berechnen, SQL Fehler?

Beitrag von RobertG » Fr 4. Apr 2014, 19:51

Hallo Suwo,

ich wollte Dir das jetzt nicht vorenthalten:
Die folgende Abfrage gibt für die von Dir vorgelegte Datenbank das Alter in Jahren und die Tage seit dem letzten Geburtstag auf.

Code: Alles auswählen

SELECT "Name", 
"Vorname", 
"Geburtstag", 
CASE WHEN MONTH( "Geburtstag" ) > MONTH( CURDATE( ) ) THEN DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) - 1 WHEN ( MONTH( "Geburtstag" ) = MONTH( CURDATE( ) ) AND DAY( "Geburtstag" ) > DAY( CURDATE( ) ) ) THEN DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) - 1 ELSE DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) END AS "Alter", 
DATEDIFF('dd',CONVERT( YEAR("Geburtstag")+CASE WHEN MONTH( "Geburtstag" ) > MONTH( CURDATE( ) ) THEN DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) - 1 WHEN ( MONTH( "Geburtstag" ) = MONTH( CURDATE( ) ) AND DAY( "Geburtstag" ) > DAY( CURDATE( ) ) ) THEN DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) - 1 ELSE DATEDIFF( 'yy', "Geburtstag", CURDATE( ) ) END||'-'||RIGHT('0'||MONTH("Geburtstag"),2)||'-'||RIGHT('0'||DAY("Geburtstag"),2), DATE),CURDATE()) AS "Tage_seit_letztem_Geburtstag" 
FROM "Geburtstag"
Ich löse das Geburtsdatum in seine Bestandteile auf, addiere zu der Jahreszahl das Alter hinzu und mache daraus wieder ein Datum. Dann rechne ich von diesem Datum (dem letzten Geburtstag) die Differenz zu heute in Tagen aus.
Vielleicht geht's auch cleverer - mir ist aber keine andere Lösung auf Anhieb eingefallen.

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare

suwo
Beiträge: 94
Registriert: Sa 12. Mär 2011, 10:40

Re: Altr berechnen, SQL Fehler?

Beitrag von suwo » Mo 7. Apr 2014, 08:36

Hallo.

Vielen Dank für die Hinweise. Im Handbuch habe ich nur auf Seite 248 das Bsp. gefunden. Auf 'dd' wäre ich von alleine nicht gekommen, oder habe ich da etwas im Handbuch übersehen?
Ich hoffe, ich komme damit weiter (Alter ausrechnen und dann den Altersdurchschnitt einer Gruppe in einem Bericht auswerfen). Wenn nicht, muss ich wohl wieder mal fragen. ;)

Mfg,

Suwo

RobertG
* LO-Experte *
Beiträge: 2884
Registriert: Sa 19. Mai 2012, 17:37
Kontaktdaten:

Re: Altr berechnen, SQL Fehler?

Beitrag von RobertG » Di 8. Apr 2014, 10:03

Hallo Suwo,
suwo hat geschrieben:Im Handbuch habe ich nur auf Seite 248 das Bsp. gefunden. Auf 'dd' wäre ich von alleine nicht gekommen, oder habe ich da etwas im Handbuch übersehen?
Ich weiß einige Funktionen auch nicht aus dem Kopf. Deswegen gibt es im Handbuch den Anhang mit allen Funktionen zur HSQLDB. DATEDIFF ist natürlich auch dabei mit allen Parametern.

Vermutlich wären hier Verweise an den entsprechenden Stellen angebracht ...

Gruß

Robert
https://de.libreoffice.org/get-help/documentation/
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=base_handbuch
https://www.familiegrosskopf.de/robert/index.php?&Inhalt=xml_formulare


An alle, die das LibreOffice-Forum gern nutzen und unterstützen wollen:


Bitte helfen Sie uns mit 7 Euro pro Monat.
Durch Ihren Beitrag tragen Sie dazu bei, unsere laufenden Kosten für die kommenden Monate zu decken.
Unkompliziert per Kreditkarte oder PayPal.
Als ein kleines Dankeschön werden Sie im LO-Forum als SUPPORTER gekennzeichnet.



Antworten