W Wolli013 Well-Known Member Licensed User Longtime User Feb 7, 2015 #1 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.
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.
R rboeck Well-Known Member Licensed User Longtime User Feb 7, 2015 #2 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.
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.
W Wolli013 Well-Known Member Licensed User Longtime User Feb 7, 2015 #3 Ich habe es natürlich als Deutscher in z.B. 07.02.2015 gespeichert
W Wolli013 Well-Known Member Licensed User Longtime User Feb 7, 2015 #4 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: Feb 7, 2015
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'),'-','')";
P peternmb Well-Known Member Licensed User Longtime User Feb 21, 2015 #5 Lösung gefunden??? Könnte ich auch gebrauchen - bei meinen importierten Daten wird das Datum auch in deutscher Schreibweise als Text übergeben.
Lösung gefunden??? Könnte ich auch gebrauchen - bei meinen importierten Daten wird das Datum auch in deutscher Schreibweise als Text übergeben.
W Wolli013 Well-Known Member Licensed User Longtime User Feb 21, 2015 #6 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. 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.
P peternmb Well-Known Member Licensed User Longtime User Feb 21, 2015 #7 Wolli013 said: Habe es jetzt so gemacht, das ich das Formartierte Datum zusätzlich mit in der Tabelle abspeichere und kann es dann danach super sortieren. Click to expand... 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).
Wolli013 said: Habe es jetzt so gemacht, das ich das Formartierte Datum zusätzlich mit in der Tabelle abspeichere und kann es dann danach super sortieren. Click to expand... 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).
P peternmb Well-Known Member Licensed User Longtime User Feb 22, 2015 #8 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
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
W Wolli013 Well-Known Member Licensed User Longtime User Feb 22, 2015 #9 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.
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 Feb 23, 2015 #10 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
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
MaFu Well-Known Member Licensed User Longtime User Feb 24, 2015 #11 Wieso speichert ihr eigentlich alle das Datum immer als String in der Datenbank?