Selektieren nach Datum, Monat, Tag in date- und datetime-Formaten

sharmuur

Mitglied
Hallo,

ich möchte in eine MySQL-DB (version 4.1.x ) eine Tabelle, anlegen. Die ursprungliche Tabelle in EXCEL sieht wie folgt aus:

Datum Uhrzeit Parameter Messwert

Ich möchte später in der Tabelle die Datensätze nach Jahr, Monat, Tag und Uhrzeit selectieren.

Ich hätte 3 zwei Alternativen das Datum und die Uhrzeit in der Tabelle anzulegen.

Der erste wäre: Datum ( typ: DATE ), Uhrzeit ( typ: TIME )

Der zweite wäre: Datum und Uhrzeit ( typ: DATETIME )

Der dritte wäre: Jahr( typ:smallint), Monat( typ: smallint ), Tag( typ:smallint ), Uhrzeit ( typ: smallint ) hier nur immer auf volle Stunde berechnet(z.B. 12, 13 etc.).

Jetzt kommt endlich die Frage. Kann man mann in der ersten und zweiten Variante nach Datum, Monat, Tag und Uhrzeit selectieren?
ZB. select messwert from Tabelle where jahr=2001 and monat=12 and tag=31

Kann jemand mir erfahrungsgemäß sagen, ob die ersten und zweite Varianten vorteilhafter sind als die dritte Variante. Die Variante kommt mir einfacher.

danke voraus
 
Zuletzt bearbeitet:
Die 2te Variante macht in meinen Augen am meisten Sinn. Warum als INT speichern, wenns dafür ein passendes Format gibt.

Mit den Datums- und Zeitfunktionen kannst du nachher mehr oder weniger bequem darauf zugreiffen

Mit dem DATETIME-Typ kannst du nachher auch problemlos rechnen (Letzter Tag des Monats, 30 Tage addieren etc)

SQL:
SELECT *
FROM myTable
WHERE
	YEAR(myDateField) = 2010
	AND MONTH(myDateField) = 4
	AND DAY(myDateField) = 30;
oder
SQL:
SELECT *
FROM myTable
WHERE DATE(myDateField) = STR_TO_DATE('30.04.2010', '%d.%m.%Y');
 
Zuletzt bearbeitet von einem Moderator:
Hätte noch eine Frage. Das Datum in der EXCEL-Tabell liegt im folgenden Format vor: 31.12.2001.
Ich habe gerade auf der Webseite http://dev.mysql.com/doc/refman/5.1/de/date-and-time-types.html gelesen, dass man das datum nur in der Reihenfolge 2001.12.31 speichern kann und dass das Trennzeichen "-" sein sollte.
Gibt es keine Möglichkeiten ausser dieser?
Da ich mindestens 8 millionen Datensätze in dem Format habe, wird es mir sehr viel Zeit kosten wenn ich die Positionen von jahr und tag wechsele. Gibt es irgendwelche tricks?

Gruß
 
Du erstellt aus dem Excel eine Temporäre Tabelle in der Datenbank. Das Datumsfeld definierst du da als Varchar.
Dann machst du ein INSERT-Query zur Zieldatenbank mit allen notwendigen Konvertierungen

SQL:
INSERT INTO myTable
	(id, datum, bezeichnung)
SELECT 
	id,
	STR_TO_DATE(datum, '%d.%m.%Y'),
	bezeichnung
FROM 
	tempMyTable;
 
Zuletzt bearbeitet von einem Moderator:
man hätte auch im Excel das Format der Zelle ändern können.

rechtsklick -->zelle formatieren --> Benutzerdefiniert YYYY-MM-DD so macht er dir aus 12-10-2009 2009-10-12
 
man hätte auch im Excel das Format der Zelle ändern können.

rechtsklick -->zelle formatieren --> Benutzerdefiniert YYYY-MM-DD so macht er dir aus 12-10-2009 2009-10-12

Macht manchmal Sinn, manchmal auch nicht. Wenn du das Excel als Datenquelle bekommst (im Falle von csv-Dateien als Datentransfer zwieschen Systemen) ist es mühsam jedesmal zuerst das Excel zu öffnen um das Feld anzupassen.
 
Zurück