Insert Befehl für Datum von/bis

Genkin

Benutzer
Beiträge
7
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
 
Werbung:
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.
 
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
 
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.
 
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
 
35023424567
Ich will zwischen zwei Zeilen schreiben.

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.
 
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:
 
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.
 
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.
 
Werbung:
luke-skywalker-helpdesk.jpg
 
Zurück
Oben