1. Nimm jetzt an unserem Geotel Note - Gewinnspiel teil - Informationen zum Note findest Du hier!
  1. badkeks, 01.04.2011 #1
    badkeks

    badkeks Threadstarter Neuer Benutzer

    Hallo Leute,

    nachdem ich endlich meine restlichen Problem gelöst habe, stehe ich jetzt vor meinem letzten Problem.

    Und uwar wie schaffe ich es innerhalb des SQL - Statement nach dem Datum zu sortieren.. (weil es gibt ja keinen speziellen datentyp für ein datum)

    Ich hab ein Feld vom Typ Text das heißt _date und eines das heißt _time

    Beispiel für den Inhalt der Felder:
    _date = 10.3.2011
    _time = 10:30

    Probiert hab ich das ganze mit:

    SELECT strftime('%d%m%y', _date) AS dateNew ...

    Allerdings ohne Erfolg..

    Vielleicht kann mir da einer noch helfen!

    Vielen Dank schonmal!
     
  2. swordi, 02.04.2011 #2
    swordi

    swordi Gewerbliches Mitglied

    meistens speichert man das datum als timestamp und formatiert es dann wie man es braucht
     
  3. badkeks, 02.04.2011 #3
    badkeks

    badkeks Threadstarter Neuer Benutzer

    Versteh ich das richtig, dass wenn ich den Datentyp in SQL vom Feld _date, _time auf Timestamp ändere, dass die Sortierung direkt durch das SQL-Statement funktioniert, oder muss ich zusätzlich weiter formatieren..?!?
     
  4. funcoder, 02.04.2011 #4
    funcoder

    funcoder Erfahrener Benutzer

    Ein Timestamp ist ja nur die Zeit in Millisekunden die nach dem 1.1.1970 vergangen sind. Also eine nette Integer Zahl.
    Zugleich bedeutet es, das desto höher die Zahl das Datum an neuesten ist, bzw. die kleineste Zahl ist das am weit entfernteste Datum.

    Möchtest du diese sortieren benötigst du bei deinem SQL Select ein "order by Timestamp" mit dranhängen. Bzw. "ASC" oder "DESC", je nachdem ob aufsteigend oder absteigend.

    Das wäre es schon. :)
     
  5. badkeks, 07.04.2011 #5
    badkeks

    badkeks Threadstarter Neuer Benutzer

    Hallo Leuts irgendwie krieg ich das immer noch nicht ganz gebacken..

    Der Datentyp der Felder _date und _time sind mittlerweile auf den Datentyp "Timestamp" geändert worden...

    Der Eintrag sieht wie folgt aus:

    _date = 10.3.2011
    _time = 10:30

    Wenn ich das ganze jetzt sortieren will mit ORDER BY _date, _time
    funktioniert das nur sehr bedingt teilweise stimmt die Reihenfolge dann aber wieder 1 - 2 Ausreiser...

    Was genau muss ich denn noch machen?

    Ist die Formatierung ins Format dd.mm.yyyy ein Problem?
     
  6. maniac103, 07.04.2011 #6
    maniac103

    maniac103 Android-Lexikon

    Du musst _date und _time durch ein Timestamp-Feld ('_time') ersetzen. Da steht dann (wie schon erwähnt) die Zeitspanne in Millisekunden seit 1.1.1970 0:00 drin, die bei der Ausgabe passend formatiert werden kann.
    Dann klappts auch mit dem Sortieren ;)
     
  7. badkeks, 07.04.2011 #7
    badkeks

    badkeks Threadstarter Neuer Benutzer


    Aber Timestamp ist doch der Datentyp der SQL - Tabelle oder sehe ich das falsch..?!?
    WEil ich hab _date und _time als Timestamp deffiniert..

    Ich hab eine Datepicker welcher das Datum im Format 1.1.2011 erfasst und in ein Formularfeld schreibt welches ich dann anschließend in die DB schreibe..
    Selbiges auch beim Timepicker... hier das Format HH:MM
     
  8. DieGoldeneMitte, 07.04.2011 #8
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Deine Angaben sind widersprüchlich. Einerseits redest du davon, dass du als SQL Typ typestamp angibst, aber andererseits redest Du davon, dass Du aus dem Zeitangaben irgendwelche String-repäsentationen ausrechnest und die dann speicherst.

    Und eine Zeitangabe auf zwei Spalten zu packen ist eine gefährliche Idee. Denn eine Zeitangabe, die Du nur teilweise interpretiest, kann uninterpretierte Anteile enthalten, die dann bei der Sortierung zu den beobachteten Effekten führen.

    ADD Beispiel:
    * am 1.1.2012 wird das Datum 1.1.2020 13:00 gespeichert.
    * am 2.1.2012 wird das Datum 1.1.2020 11:00 gespeichert.

    Durch deine Datenstruktur kann die Uhrzeit möglicherweise das Datum der Erstellung erhalten, die du aber nicht ausliest. Beim Sortieren stünde dann 13:00 vor 11:00.
     
    Zuletzt bearbeitet: 07.04.2011
  9. maniac103, 07.04.2011 #9
    maniac103

    maniac103 Android-Lexikon

    Genau das ist ja das Problem ... Timestamp speichert beides in einem.

    Wie wär's damit:

    Code:
    DatePicker date; /* hast du schon */
    TimePicker time; /* hast du schon */
    
    GregorianCalendar cal = new GregorianCalendar(date.getYear(), date.getMonth(), date.getDayOfMonth(), time.getCurrentHour(), time.getCurrentMinute(), 0);
    long timestamp = cal.getTime().getTime();
    /* timestamp in DB schreiben */