Anzeige:
Ergebnis 1 bis 5 von 5

Thema: MySQL-Datumswerte addieren und subtrahieren

  1. #1
    Registrierter Benutzer
    Registriert seit
    18.07.2000
    Beiträge
    7

    Question MySQL-Datumswerte addieren und subtrahieren

    Eine SQL-Einführung, mit der ich immer mal wieder arbeite, gibt für Informix u.a. Systeme bei den Datumsfunktionen date() an, zeigt an Tag, Monat und Jahr.
    Ich finde bei MySQL keine entsprechende Funktion.
    Aufgabe, Ermittlung, ob's ein Schaltjahr ist

    select date('01.03.1992') -1 from persdat where persnr = 1;

    Das lässt sich in MySQL realisieren mit

    select date_sub('1992-03-01', interval 1 day) from persdat where persnr = 1;

    (Ergebnis 1992-29-02, ist ein Schaltjahr.)

    Aber folgende Aufgabe
    Wie viele Tage liegen zwischen dem 3.3.92 und dem 29.2.92,
    nach Buch mit date() folgendermaßen

    select date('03.03.1992') - date('29.02.1992') from persdat where persnr = 1;

    also einfach das eine Datum vom anderen subtrahieren, Ergebnis die Zahl der Tage, nämlich 3, krieg ich mit MySQL auch nach einigem Handbuchstudium nicht hin.
    Die MySQL-Funktionen curdate() oder now() geben einfach nur das aktuelle Datum aus und akzeptieren keine Zusatzargumente. Und ein Intervall bspw. year_month_date zu date_add und date_sub gibt es leider nicht.
    Ebenso wenig schaff ich folgendes Beispiel

    select date('15.05.1985') - eintritt from persdat where persnr = 1;

    wobei eintritt eine Tabelle ist, die auch Datumswerte enthalt.

    Also, wie kann ich in MySQL bei zwei Datumswerten mit Subtraktion, oder halt auch Addition arbeiten?
    Gruß und Dank
    Berthold

  2. #2
    Registrierter Benutzer Avatar von lolli
    Registriert seit
    21.09.2000
    Beiträge
    166
    Hi,
    prinzipiell kannst du die Differenz mit select to_days(DATUM1)-to_days(DATUM2);
    ermitteln.
    Es geht auch select to_days('19920301') - to_days('19920229');

    Problematisch ist dabei allerdings, das das Format entweder ein MySQL-Datumsformat
    sein muss, oder die Werte in Klammern im Format YYYYMMDD angegeben werden müssen.

    select date('19850515') - TO_DAYS(eintritt) from persdat where persnr = 1;

    Im diesem Beispiel muss eintritt von eben diesem Format sein. Alternativ muss du ein entsprechendes Layout errechnen.

    Welches Format hat denn eintritt?

    Oliver

  3. #3
    Registrierter Benutzer
    Registriert seit
    18.07.2000
    Beiträge
    7
    Klar, das müsste es sein, ich hab heut keine Zeit mehr, das auszuprobieren.
    Is ja loggisch, wenn du für beide Werte die Zahl vom Jahr 0 an hast und dann subtrahierst. Hab ich völlig übersehen. Damit sollte Aufgabe 1 geloest sein.
    Aufgabe 2 muss ich mal sehn.
    Diese Tabelle eintritt hat auch das normale Datumsformat yyyy-mm-dd
    Thanx, ich poste nochmal, ob das geklappt hat!
    B.

  4. #4
    Registrierter Benutzer Avatar von lolli
    Registriert seit
    21.09.2000
    Beiträge
    166
    > Aufgabe 2 muss ich mal sehn.
    > Diese Tabelle eintritt hat auch das normale Datumsformat yyyy-mm-dd

    Problem 2: Habe ich ganz übersehen. :-)

    Zuerst benötigst du in beiden Tabellen eine ID, die die jeweiligen Tabellenzeilen eindeutig einem Objekt (Person) zuordnet. Möglicherweise ist das die persnr. Weiterhin brauchst du den Spaltennamen (Tabelle eintrag), die die Datumsangabe enthält. Ich unterstelle mal, die heisst 'datum'. Wenn dem so ist, sollte die folgende Abfrage funktionieren:

    select persdat.persnr , to_days('19850515') - to_days(eintritt.datum) from persdat,eintrag where persdat.persnr = 1 AND persdat.persnr=eintrag.persnr;

    Hoffentlich hilfts dir. Wenn nicht, wieder posten...

    Oliver

  5. #5
    Registrierter Benutzer
    Registriert seit
    18.07.2000
    Beiträge
    7

    Smile

    Mit der Abfrage, die du gestern gepostet hattest, ist alles paletti, beide Beispiele sind lösbar, also
    select to_days('1992-03-03') - to_days('1992-02-29') from ...
    und
    select to_days('1985-05-15') - to_days(eintritt) from ...
    Ich hatte da was falsch gepostet. eintritt ist keine eigene Tabelle, sondern ein (Datums)-Feld von persdat. Im üblichen Format yyyy-mm-dd.
    Ich wühl mich dann mal weiter durch die Datums-, String-, Mathematischen u.a. Funktionen.
    Danke
    B.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •