MySQL BETWEEN gibt nicht korrekten Bereich aus

Hallo Zusammen,

folgende Tabellen:

Posten
beleg_id artikel_id (zusammengesetzer Primärschlüssel) menge

Beleg
id praxis_id datum (type: TIMESTAMP)

folgende Abfrage:

SELECT p . * , b . *
FROM posten p
INNER JOIN beleg b ON p.beleg_id = b.id
AND b.datum
BETWEEN ‚2012-07-11‘
AND ‚2012-07-13‘

gibt ein leeres Ergbnis zurück.

Es gibt definitiv Datensätze die in den zeitlichen Bereich fallen und über
beleg.id => posten.beleg_id verbunden sind.

Wenn ich den zeitlichen Bereich auf z.B.:
BETWEEN ‚2012-01-11‘ AND ‚2012-07-13‘

erweitere bekomme ich Datensätze angezeigt. Muss ich für das Datum eine andere Formatierung nutzen? Oder hat sonst jemand eine Idee?

Hallo,

ich kann keinen Fehler entdecken in Deiner Query entdecken. Die Datumsformatieren sollte funktionieren.
Hast du für das datum-Feld auch eine datetime oder ähnlich, also kein varchar benutzt?
Evtl. ist der Fehler doch in den Daten zu finden.

Gruß
Till

Hallo Friendly,
ich hatte den fall zwar noch nicht ich würde aber sagen das der inner join nur nach exacter übereinstimmung sucht.
und deswegen das between statment mal in eine WHERE clausel

ungefähr so:
SELECT p . * , b . *
FROM posten p
INNER JOIN beleg b ON p.beleg_id = b.id

WHERE b.datum BETWEEN ‚2012-07-11‘ AND ‚2012-07-13‘

gruss chris

Hi,
2 ideen.

  1. Format der Zeichensätze falsch. Prüfe mal ob UTF-8 weil sonst die reihenfolge nicht stimmt.
  2. Ich weiss nicht ob between ein Datum vergleichen kann da es ja die >= option bei dir ersetzt.
    Probiere mal eine Zusatzspalte aus in der du das Datum als Zahl eintagen lässt.

Ergo 20120711 und 20120713 dann sollte between es schlucken.

Geb mal Feedback ob es geholfen hat.

Gruß
Crusher-web

Ich nehme an, das Datum soll nur den auszugebenden Zeitbereich einschränken. So, wie es o.g. formuliert ist, wird es aber als Kriterium für das JOIN verwendet. Versuche

SELECT p . * , b . *
FROM posten p
INNER JOIN beleg b ON p.beleg_id = b.id
WHERE b.datum
BETWEEN ‚2012-07-11‘
AND ‚2012-07-13‘

Das Datumsformat scheint mir tatsächlich problematisch zu sein. Da gehört noch mehr dazu, z.B. die Zeitzone.
Guck doch mal in die relativ gut mysql-Doku nach Zeitangaben, meines Wissens ist gerade dieser Bereich ausführlich beschrieben.

Bist du sicher, dass du Daten hast vom 11.,12. oder 13.07.2012?
Wäre die Abfrage falsch würdest du auch mit dem 2.Bereich nichts finden.

vg
Ingrid