MySQL Tabelle nach Datum sortieren

Grafixboy

Erfahrenes Mitglied
Ein Hallihallo an alle Datenbänkler

Ich muss mich hier gerade mit einer schlecht programmierten Datenbank auseinandersetzen.
Das was mich dabei am meisten nervt und eine Fehlersuche beinahe unmöglich macht ist das fast
alle Datumsangaben in den Tabellen als VARCHAR(100) :( abgespeichert wurden und den folgenden Aufbau haben: "05.06.2014" (String).

So nun zu meiner Frage ist es dennnoch möglich die knapp 4800 Datensätze sortiert nach Datum ausgegebenzu bekommen.
Die Lösung könnte ich dann auf knapp 40 Tabellen anwenden.

Da es bei mir echt brennt Danke ich schon mal im vorhinein für eure tatkräftige Hilfe.
_____________________________________________
SELECT * FROM `Buchhaltung`
WHERE `buch_datum` LIKE '%.2014%'
AND `bu_datum` LIKE '%.05.%'
LIMIT 0 , 200
_____________________________________________

So mache ich es derzeit ich brauche jedoch alle Datensätze zwischen einem bestimmten Datum.
Also benötige ich eine Lösung auf den ich BETWEEN anwenden kann.

Und das Liefert mir dann alle Daten vom Monat Mai.

Mit freundlichen Grüßen

Grafixboy :)
 
Zuletzt bearbeitet:
Like mit % ist nicht optimal. Ich würde mit SUBSTRING arbeiten:
http://www.sqlfiddle.com/#!2/ce300d/4

Wenn du magst, kannst du dann die einzelnen Abschnitte auch noch mittels CAST/CONVERT in einen int konvertieren damit du besser nach einem Range suchen kannst.

EDIT: war wohl zu langsam und die Lösung von Yaslaw ist sowieso besser ;)
 
Also kann ich das dann in etwa so verwenden ?
Variante A:
SELECT * FROM `Buchhaltung` WHERE
`buch_datum` BETWEEN STR_TO_DATE("05.05.2014", '%d.%m.%Y')
AND STR_TO_DATE("19.05.2014", '%d.%m.%Y');

Variante B:
SELECT * FROM `Buchhaltung` WHERE
`buch_datum` BETWEEN STR_TO_DATE(buch_datum, '05.05.2014')
AND STR_TO_DATE(buch_datum, '19.05.2014');

Variante C:
SELECT * FROM `Buchhaltung` WHERE
STR_TO_DATE(buch_datum, '%d.%m.%Y') BETWEEN '05.05.2014'
AND '19.05.2014';

Wie ist es nun richtig ? A..., B.... oder ....C?
 
Keine Ahnung was du genau haben willst
Aber B sicher nicht.

Ich hätte D gesagt. Du willst ja ein Datumvergleich, und nicht ein Vergleich von String mit Datum
SQL:
SELECT *
FROM `Buchhaltung`
WHERE
    STR_TO_DATE(buch_datum, '%d.%m.%Y') BETWEEN 
        STR_TO_DATE("05.05.2014", '%d.%m.%Y')
        AND STR_TO_DATE("19.05.2014", '%d.%m.%Y');
 
Perfekt das war was ich gesucht habe ;) Danke

Da war ja Variante A fast richtig.
Aber hast ja recht er weiß ja sonst nicht wie er buch_datum behandeln soll.
 
Zuletzt bearbeitet:
Zurück