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

Insert Befehl für Datum von/bis

Dieses Thema im Forum "MySQL und MariaDB" wurde erstellt von Genkin, 19 April 2019.

  1. Genkin

    Genkin Benutzer

    Hallo
    Ich möchte in eine DB schreiben !

    sei:
    DatumBeginn = 01.01.2000
    Datum Beginn = 30.01.2000

    Gibt es einen Befehl, der mir den ganzen Zeitraum zwischen oben genannten Daten reinschreibt?

    01.01.2000
    02.01.2000
    03.01.2000
    ...
    ...
    31.01.2000
     
  2. akretschmer

    akretschmer Datenbank-Guru

    Prinzipiell geht das folgende auch in MySQL:

    Code:
    test=# create table genkin(datum date);
    CREATE TABLE
    test=*# insert into genkin select * from generate_series('2000-01-01'::date, '2000-01-30'::date, '1day'::interval);
    INSERT 0 30
    test=*# select * from genkin ;
       datum   
    ------------
     2000-01-01
     2000-01-02
     2000-01-03
     2000-01-04
     2000-01-05
     2000-01-06
     2000-01-07
     2000-01-08
     2000-01-09
     2000-01-10
     2000-01-11
     2000-01-12
     2000-01-13
     2000-01-14
     2000-01-15
     2000-01-16
     2000-01-17
     2000-01-18
     2000-01-19
     2000-01-20
     2000-01-21
     2000-01-22
     2000-01-23
     2000-01-24
     2000-01-25
     2000-01-26
     2000-01-27
     2000-01-28
     2000-01-29
     2000-01-30
    (30 rows)
    
    test=*#
    
    Man muß sich nur eine generate_series() - Funktion nachbauen, weil MySQL dies und vieles mehr nicht von Hause aus kann.

    Btw.: Deine Variablen heißen gleich, aber das ist sicher nur ein Versehen, und das Leerzeichen in der zeiten ist sicher auch nur ein Versehen.
     
  3. Genkin

    Genkin Benutzer

    Mache das über phpmyadmin
    Und da meckert er wegen falscher Syntax
    (Variablenname wurde erwartet ( bei : )


    Code:
    insert into genkin select * from generate_series('2000-01-01'::date, '2000-01-30'::date, '1day'::interval);
    INSERT 0 30
    
     
  4. akretschmer

    akretschmer Datenbank-Guru

    ich hab ja gesagt, MySQL kennt diese Funktion nicht. Mit welchem Client (mysql-cli, PMA, $whatever) Du eine nicht vorhandene Funktion aufrufst, bleibt daher immr gleich. Da MySQL vieles nicht kann, und den Rest oft falsch, verwende ich es nicht. Google nach MySQL und generate_series, Da findest Du einige schmutzige Workarounds. Oder verwende halt was besseres. PostgreSQL z.B.
     
  5. Genkin

    Genkin Benutzer

    Ok danke dir erstmal.

    Eine andere Frage, wollte jetzt kein neues Thema erstellen.

    Wieso funktioniert dieser Befehl nicht?

    INSERT INTO Tabelle (Spalte1, Spalte2, Spalte3)
    VALUES (Wert1, Wert2, Wert3)
    WHERE Spalte0 BETWEEN Etwas AND nochEtwas;

    Ich will zwischen zwei Zeilen schreiben.
    Kriege die Meldung unerwartetes Zeichen und StatementTyp bei WHERE
     
  6. akretschmer

    akretschmer Datenbank-Guru

    35023424567
    Das ist das Problem. Also Dein Denkfehler. Datenbanken operieren auf Mengen, die erst einmal unsortiert sind. Nehme ein Sandkorn, und füge es zwischen dem
    35023424567 und 35023424568 Sandkorn eines Sandhaufens im Kindergarten um die Ecke ein. Wo fängst Du an zu zählen?

    Um das mal anders zu zeigen:

    Code:
    test=# create table Genkin(i int);
    CREATE TABLE
    test=*# insert into genkin values (1);
    INSERT 0 1
    test=*# insert into genkin values (2);
    INSERT 0 1
    test=*# insert into genkin values (3);
    INSERT 0 1
    test=*# update genkin set i = 2 where i = 2;
    UPDATE 1
    test=*# insert into genkin values (4);
    INSERT 0 1
    test=*# select * from genkin ;
     i
    ---
     1
     3
     2
     4
    (4 rows)
    
    test=*#
    
    Versuch zu verstehen, was passiert. Denke dabei an Dinge wie MVCC.

    Hint: Datensätze haben keine Ordnung. Datensätze einer Tabelle sind wie Sandköner eines Haufens. Erst wenn Du diese nach einem Kriterium sortiert, entsteht eine sortierte Menge. Physisch bleibt es unsortiert.
     
  7. Genkin

    Genkin Benutzer

    Nettes Beispiel mit dem Sandkorn...

    Und wie schreibe ich in eine Tabelle die mehrere Zeilen hat, ich aber beispielsweise nur in die 1. Zeile schreiben will? Jetzt sag mir bitte nicht, dass das auch nicht geht, dann war meine ganze Mühe umsonst :eek:
     
  8. akretschmer

    akretschmer Datenbank-Guru

    wenn Du das Ergebniss einer Abfrage sortiert haben wollst, dann sortiere bei der Abfrage. Klingt jetzt lustig, aber das ORDER BY wurde exakt dafür vor vielen Jahren schon zu Ostern gefunden.
     
  9. ukulele

    ukulele Datenbank-Guru

    Er sucht Update, Insert ist nur für komplett neue Datensätze. Update aktualisiert bereits existierende Zeilen (auch Werte die noch null sind) und dort kannst du auch WHERE verwenden.
     
  10. akretschmer

    akretschmer Datenbank-Guru

    Kann sein, also könnte man in der Tat so interpretieren...
     
  11. Genkin

    Genkin Benutzer

    Ja in der Tat, Update! :D

    Frohe Ostern allen :D
     
  12. ukulele

    ukulele Datenbank-Guru

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