Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

Alle von nächstem Monat selektieren

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von xlumia, 27 April 2017.

  1. xlumia

    xlumia Benutzer

    Ich möchte aus meiner Tabelle Personen alle selektieren, die nächsten Monat Geburtstag haben.

    select v_name, n_name, geb_datum from personen;

    Ich steh leider gerade total auf der Leitung und habe keine Ahnung wie ich das machen soll.
    Kann mir jemand weiter helfen?
     
  2. akretschmer

    akretschmer Datenbank-Guru

    prüfe einfach, ob das Alter in Jahren der Personen sich zwischen heute und heute+30 Tagen ändert, In PostgreSQL ganz einfach:

    Code:
    test=# create table birthdays(id serial primary key, name text, birthday date);
    CREATE TABLE
    test=*# insert into birthdays select s, 'name ' || s::text, '1980-01-01'::date + '1day'::interval * random()*10000 from generate_series(1, 100) s;
    INSERT 0 100
    test=*# select * from birthdays limit 15;
     id |  name  |  birthday  
    ----+---------+------------
      1 | name 1  | 1988-02-14
      2 | name 2  | 1991-11-01
      3 | name 3  | 1993-10-12
      4 | name 4  | 1993-09-28
      5 | name 5  | 1987-11-23
      6 | name 6  | 1986-09-22
      7 | name 7  | 1991-06-15
      8 | name 8  | 2005-03-27
      9 | name 9  | 1986-01-11
     10 | name 10 | 1995-03-13
     11 | name 11 | 1995-10-28
     12 | name 12 | 1981-05-17
     13 | name 13 | 1983-07-23
     14 | name 14 | 1991-01-31
     15 | name 15 | 1990-09-24
    (15 Zeilen)
    
    test=*# select * from birthdays where extract(year from age(birthday)) != extract(year from age(current_date + 30, birthday));
     id  |  name  |  birthday  
    -----+----------+------------
      12 | name 12  | 1981-05-17
      22 | name 22  | 1993-05-27
      47 | name 47  | 1983-05-06
      52 | name 52  | 1986-05-01
      67 | name 67  | 1994-05-17
      84 | name 84  | 1980-05-09
      89 | name 89  | 1987-05-02
     100 | name 100 | 1985-05-27
    (8 Zeilen)
    
    test=*#
    
     
  3. drdimitri

    drdimitri Datenbank-Guru

    Oder man prüft, welches Geburtsdatum im nächsten Monat liegt:
    Code:
    select * from birthdays where extract(month from birthday) = extract(month from add_months(sysdate,1))
     
  4. akretschmer

    akretschmer Datenbank-Guru

    dann extrahiere den Monat und vergleiche.
     
  5. akretschmer

    akretschmer Datenbank-Guru

    Code:
    test=*# select * from birthdays where extract(month from birthday) = 5;
     id  |  name  |  birthday  
    -----+----------+------------
      12 | name 12  | 1981-05-17
      22 | name 22  | 1993-05-27
      43 | name 43  | 1992-05-30
      47 | name 47  | 1983-05-06
      52 | name 52  | 1986-05-01
      67 | name 67  | 1994-05-17
      84 | name 84  | 1980-05-09
      89 | name 89  | 1987-05-02
     100 | name 100 | 1985-05-27
    (9 Zeilen)
    
     
  6. drdimitri

    drdimitri Datenbank-Guru

    Wenn es hart codiert reicht - ansonsten eben sysdate.

    PS: Dann deine Lösung hat wohl einen Geburtstag unterschlagen.
     
    akretschmer gefällt das.
  7. akretschmer

    akretschmer Datenbank-Guru

    ja, stimmt, die 5 wäre hard codiert, nicht gut. Dann besser ausgehend vom aktuellen Datum den nächsten Monat ermitteln.
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden