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.
 

rboeck

Well-Known Member
Licensed User
Longtime User
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.
 

Wolli013

Well-Known Member
Licensed User
Longtime User
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:

peternmb

Well-Known Member
Licensed User
Longtime User
Lösung gefunden???
Könnte ich auch gebrauchen - bei meinen importierten Daten wird das Datum auch in deutscher Schreibweise als Text übergeben.
 

Wolli013

Well-Known Member
Licensed User
Longtime User
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.
 

peternmb

Well-Known Member
Licensed User
Longtime User
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).
 

peternmb

Well-Known Member
Licensed User
Longtime User
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
B4X:
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
 

Wolli013

Well-Known Member
Licensed User
Longtime User
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.
 

DonManfred

Expert
Licensed User
Longtime User
Ich habe jeweils (zu allen datumfeldern) ein ähnlich lautendes feld (string)

Folgende Query läuft hier regelmässig auf alle Datumsfelder bezogen
B4X:
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
 
Top