String als Datum und sortieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • String als Datum und sortieren

    Hallo,

    ich habe ein kleines Nach-Datum-sortieren Problem.

    Folgendes Daten (Datums?) bekomme ich als Varchar aus einer Tabelle:
    29.07.-26.08.05
    12.09.-10.10.05
    02.11.-07.12.05

    Ich möcht nun nach dem Startdatum sortieren - im Query.
    Mit PHP könnt ich jetzt halt jetzt bis zum "-" trennen und dann per date() sortieren. Aber wie in SQL? Hab mal ne nette Seite gehabt in der erklärt wurde wie man n String als Datum handhabt... find ich aber irgendwie nicht mehr :-/

  • #2
    String als Datum und sortieren

    Hallo,

    wie im anderem Threat hier noch mal einfacher:

    [COLOR=green]01.09.[/COLOR]-29.09.05

    Kommt als String aus der Tabelle.

    Nun soll der grüne Teil abgeschnitten werden und danach sortiert werden.

    SELECT * FROM tbl_kurse ORDER BY ....... hilfe ;-)

    Kommentar


    • #3
      Und warum steht das überhaupt so in der Tabelle ... und nicht als DATETIME?!
      carpe noctem

      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

      Kommentar


      • #4
        Warum 2 mal ??

        http://www.php-resource.de/forum/sho...threadid=57550
        carpe noctem

        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

        Kommentar


        • #5
          Ja sorry wg 2 mal.

          Steht halt so drinne.. hab ich nicht gemacht... aber hab den $"&%( halt nun an der backe...

          Ich könnte auch das ganze in 2 DATETIME felder aufslpitten... wenn ich das SQL Statements wüsste.

          Kommentar


          • #6
            Re: String als Datum und sortieren

            Original geschrieben von qualle
            Hallo,

            wie im anderem Threat hier noch mal einfacher:

            [COLOR=green]01.09.[/COLOR]-29.09.05

            Kommt als String aus der Tabelle.

            Nun soll der grüne Teil abgeschnitten werden und danach sortiert werden.

            SELECT * FROM tbl_kurse ORDER BY ....... hilfe ;-)
            Wie isn damit

            Code:
            SELECT SUBSTRING_INDEX('16.01.-12.02.05', '-', 1) AS Startdatum
            oder

            Code:
            SELECT LEFT('16.01.-12.02.05', 5) AS Startdatum

            Das Datum kannste auch gegen deinen Feldnamen ersetzen. Damit hast du schonmal nur 16.01. als Startdatum
            gruss Chris

            [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

            Kommentar


            • #7
              das is blödsinn, sortieren geht nicht korrekt mit nem string, Du solltest ein datum in das korrekte format bringen und fertig
              klar kannste das ganze in funktionen solange verwursten bis es geht, sauber is es nich
              Beantworte nie Threads mit mehr als 15 followups...
              Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

              Kommentar


              • #8
                Sagt ja auch keiner. War das die frage ???
                Sorry wenn ich den Sinn des Forums nicht verstanden habe.
                Ich dachte man hilft einander..

                Sry das ich das jetzt schreibe aber das hab ich schon des öfteren von den Moderatoren gelesen


                sortieren geht nicht korrekt mit nem string != ICH kann keine strings sortieren
                gruss Chris

                [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                Kommentar


                • #9
                  Danke, hhcm. Werd ich probieren.

                  MelloPie: Ja es ist unsauber, aber ich brauch das halt so auf die schnelle.

                  Kommentar


                  • #10
                    Also habs ausprobiert.

                    SELECT *, LEFT(datum, 5) AS Startdatum FROM kursdaten WHERE kursdaten.kurs_id='$id[$i]' ORDER BY Startdatum

                    Aber ergebniss is ja logischerweise das gleiche.

                    Der 02.11 kommt vor dem 05.06... :-(
                    Er soll das dann natürlich als Datum nehmen.

                    Kommentar


                    • #11
                      EDIT:
                      *del .... weil ziemlich bekloppt, mein vorschlag
                      Zuletzt geändert von Wurzel; 06.08.2005, 08:59.
                      Kissolino.com

                      Kommentar


                      • #12
                        Original geschrieben von qualle
                        Also habs ausprobiert.

                        SELECT *, LEFT(datum, 5) AS Startdatum FROM kursdaten WHERE kursdaten.kurs_id='$id[$i]' ORDER BY Startdatum

                        Aber ergebniss is ja logischerweise das gleiche.

                        Der 02.11 kommt vor dem 05.06... :-(
                        Er soll das dann natürlich als Datum nehmen.
                        Das meinte ich, Du müsstest erst den string auseinander nehmen mit zweimal left() dann aus dem ergebnis ein datumswert oder timestamp machen wobei Du das Jahr hinzufügen musst und nach dem gesamten ausdruck sortieren.
                        Da würd ich das lieber glatt ziehen, zeitlich wirds bei Dir aufs gleiche rauslaufen und Du hast später keine ähnlichen probleme mehr...
                        Beantworte nie Threads mit mehr als 15 followups...
                        Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                        Kommentar


                        • #13
                          So habe nun ein wenig (deswegen ist das Script etwas schlampig) Zeit gefunden das nach Datum von und Datum bis zu sortieren.
                          Wer also mal das Problem hat hier ein kleines Shuffle (Von ein Feld "Datum" in "Datum von" und "Datum bis") Script:
                          PHP-Code:
                          <?php
                          $table
                          ="kursdaten";

                          $show mysql_query("SELECT id,datum FROM ".$table."");
                          while(
                          $row mysql_fetch_object($show))
                          {
                           
                          $dat=split('[-]',$row->datum);
                           
                          $dat_von="2005.".substr($dat[0], 32).".".substr($dat[0], 02);
                           
                          $dat_bis="20".substr($dat[1], 62).".".substr($dat[1], 32).".".substr($dat[1], 02);
                           
                          $id=$row->id;

                           
                          $update=mysql_query("UPDATE ".$table." SET dat_von='".$dat_von."', dat_bis='".$dat_bis."' WHERE id='".$id."'");
                              
                          }
                          ?>
                          Datum vorher: 03.11.-15.12.05
                          Danach Datum von: 2005.11.03
                          Danach Datum bis : 2005.12.15

                          In einem Timestamp(6) feld ;-)


                          Achja nochmal:
                          Danke aber für eure schnelle Hilfe :-)

                          Kommentar


                          • #14
                            Das hättest du auch direkt als SQL machen können.
                            Substring gibts auch als SQL Befehl.

                            Da dein Datum ja scheinbar immer gleich aufgebaut ist wäre das effektiver gewesen (Wenn natürlich auch unsauber)
                            gruss Chris

                            [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                            Kommentar


                            • #15
                              Nein natürlich war es nicht überall gleich :-(
                              Deswegen auch der Regex '[-]' im split
                              Der lautet normal: '[-/.+]'

                              Aber das mit dem Split im SQL Query würde mich interresieren. Link Bitte :-)

                              Kommentar

                              Lädt...
                              X