German Deutsches Datum Sortieren SQL

Wolli013

Well-Known Member
Licensed User
Longtime User
Hallo profis, wie sortiere ich eine Deutsches Datum in einer MySql Tabelle?
Im Moment habe ich es so,
Query = "SELECT * FROM " & DBTableName & " ORDER BY LOWER(Datum)"

Funktioniert natürlich nicht richtig, wie kann ich es ändern.

Vielen Dank im vorraus.
 
Wenn Du das Datum als Text im Format Jahr-Monat-Tag mit 4 und 2 x 2 Stellen gespeichert hast, sehe ich kein Problem; das Lower( kannst Du auch einsparen, da ja ohnehin nur Zahlen enthalten sind.
 
So habe ich es in PHP am laufen, bekomme es nur nicht in B4A umgesetzt.
$cdquery="SELECT * FROM newevent ORDER by REPLACE(STR_TO_DATE(Datum, '%d.%m.%Y'),'-','')";
 
Last edited:
Lösung gefunden???
Könnte ich auch gebrauchen - bei meinen importierten Daten wird das Datum auch in deutscher Schreibweise als Text übergeben.
 
Habe es jetzt so gemacht, das ich das Formartierte Datum zusätzlich mit in der Tabelle abspeichere und kann es dann danach super sortieren.
Beispiel:

21.02.2015

'Datum aufteilen

Dim Datum As String
Datum = DateTime.Date(DateTime.now)
Dim str() As String
str = Regex.Split("\.", Datum)

'str(0) ist der Tag - str(1) ist der Monat - str(2) ist das Jahr

Datumsberechnung = str(2) & str(1) & str(0)

Neues Datum zum Sortieren 20150221
Ich lasse es aber nirgends Anzeigen es dient nur zum Sortieren.
Das Richtige Datum dient dann zur Anzeige.
 
Habe es jetzt so gemacht, das ich das Formartierte Datum zusätzlich mit in der Tabelle abspeichere und kann es dann danach super sortieren.
Hallo, danke für den Tipp.
Diese Möglichkeit habe ich auch schon in Betracht gezogen, nur da ich mehrere Datumsfelder habe, nach denen eine Sortierung der DB machbar sein soll wird das recht umständlich.
Ich muss es Morgen mal testen, ob das nicht mit einer Konvertierungsfunktion direkt im SQL-Statement machbar ist (ähnlich wie du es schon versucht hattest).
 
Ich speichere das Datum im Fomat 20141231 in der Datenbank und benutze zum Anzeigen eine kleine Funktion:
So kann ich einfach sortiern und benötige kein zusätzliches Feld in der Datenbank
Code:
Sub str2date (wert As String)  'z.B. 20141231
  Dim Tag,Monat,Jahr As String
  Tag  = wert.SubString(6)
  Monat= wert.SubString2(4,6)
  Jahr = wert.SubString2(0,4)
  Return Tag & "." & Monat & "." & Jahr
End Sub
 
So geht das natürlich auch, aber bei einer langen Liste muss ja ständig das Datum neu umgewandelt werden wenn man es in einer Liste anzeigen will.
Keine Ahnung ob sich das groß auf die Geschwindigkeit auswirkt.
 
Ich habe jeweils (zu allen datumfeldern) ein ähnlich lautendes feld (string)

Folgende Query läuft hier regelmässig auf alle Datumsfelder bezogen
Code:
update table SET indexfield = concat(substr(datefield,7,4),substr(datefield,4,2),substr(datefield,1,2)) WHERE datefield <> '';
Das Feld hier ist ein String mit einem Volltextindex.

Aus dem 15.01.2015 im datefield wird dann 20150115 im indexfield
 
Back
Top