German Deutsches Datum Sortieren SQL

Discussion in 'German Forum' started by Wolli013, Feb 7, 2015.

  1. Wolli013

    Wolli013 Active Member Licensed 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.
     
  2. rboeck

    rboeck Well-Known Member Licensed 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.
     
  3. Wolli013

    Wolli013 Active Member Licensed User

    Ich habe es natürlich als Deutscher in z.B.
    07.02.2015 gespeichert
     
  4. Wolli013

    Wolli013 Active Member Licensed 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: Feb 7, 2015
  5. peternmb

    peternmb Active Member Licensed User

    Lösung gefunden???
    Könnte ich auch gebrauchen - bei meinen importierten Daten wird das Datum auch in deutscher Schreibweise als Text übergeben.
     
  6. Wolli013

    Wolli013 Active Member Licensed 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.
     
  7. peternmb

    peternmb Active Member Licensed User

    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).
     
  8. peternmb

    peternmb Active Member Licensed 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
    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
     
  9. Wolli013

    Wolli013 Active Member Licensed 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.
     
  10. DonManfred

    DonManfred Expert Licensed User

    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
     
  11. MaFu

    MaFu Well-Known Member Licensed User

    Wieso speichert ihr eigentlich alle das Datum immer als String in der Datenbank?
     
    KMatle likes this.
Loading...
  1. This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
    By continuing to use this site, you are consenting to our use of cookies.
    Dismiss Notice