Announcement

Collapse
No announcement yet.

Eine sql anfrage, die werte zwischen 2 zeitpunkten ausgibt?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Eine sql anfrage, die werte zwischen 2 zeitpunkten ausgibt?

    Hallo,

    ich habe eine Tabelle mit dem Schema:

    Code:
    jahr monat tag uhrzeit parameter ort wert
    wobei, jahr, monat, tag, uhrzeit, parameter, ort zusammengesetzer Schlüßel von der Tabelle ist. Ich wollte eine SQL-Anfrage formulieren, die die Werte zwischen 2 Zeitpunkten ausgibt. Z.B. alle Werte zwischen 08.07.2000 und 01.12.2009. Ich habe verschiedene Varianten überlegt, aber es klappt nicht. Hat jemand vielleicht eine Idee, wie man das machen könnte?

    danke voraus
    sharmuur
    Zuletzt editiert von sharmuur; 17.02.2010, 01:44.

  • #2
    Welche Datenbank? Was hast du zB. probiert und wie war die Fehlermeldung?

    bye,
    Helmut

    Comment


    • #3
      Danke für die Antwort,

      datenbank ist mySQL.
      Habe noch keine Anfrage in die DB geschickt, da ich schon wusste, dass die Anfragen die ich mir überlegt habe nicht funktionieren wird oder anders gesagt dass ich diese nicht zusammenbringen konnte.
      eine Überlegung(bitte nicht lachen):
      erst mal alle Datensätze zwischen den Jahren 2000 und 2009 ausgeben lassen, dann von diesen Datensätze , die nicht innerhalb des ausgewählten Zeitraums sind, schritt zu schritt zu löschen:
      where jahr=2000 and monat<07-->
      where jahr=2000 and monat=07 and tag<08-->
      where jahr=2009 and monat<12-->
      where jahr=2009 and monat=12 and tag<01

      aber das würde nicht funktionieren und wenn es funktionieren würde, ist es keine elegante Lösung

      Comment


      • #4
        Wenn du so vorgehst, wirst du wohl die gesamte Datumsberechnung einschl. Schaltjahre usw. selbst in SQL nachbauen müssen (soweit das möglich ist).

        Würde vorschlagen, deine 3 DB-Felder zu nutzen um daraus ein Datum zu erzeugen und mit diesem dann die Abfrage zu gestalten.

        Bsp. mit STR_TO_DATE
        http://dev.mysql.com/doc/refman/5.1/...on_str-to-date

        Eine weitere Möglichkeit wäre, die 3 DB-Felden in ein Datumsfeld zu überführen.

        Sofern das nicht möglich ist, da unbedingter Zugriff auf 3 einzelene Felder bestehen muss (wüßte da kein Grund, da man aus dem Datum auch Tag/Monat/Jahr extrahieren kann), ein weiteres DB-Feld zu erstellen, welches das Datum enthält. Wird ein neuer DS mit den 3 Datumfeldern eingefügt, wird das Datumsfeld mit dem Datumswert aus den 3 Feldern erzeugt
        Zuletzt editiert von Christian Marquardt; 17.02.2010, 07:37.
        Christian

        Comment


        • #5
          select * from tabelle where jahr*10000+monat*100+tag between
          20000708 and 20091201

          Gruß
          docendo discimus

          Comment


          • #6
            danke für die Tipps

            Comment


            • #7
              Moin sharmuur,
              meine Abfragen nach zeitlicher Spannen löse ich wie folgt:

              Da das Datumsformat in der DB nicht im Format 01.01.2001 steht, sondern im Format yyyy-mm-dd, und die Eingabe über ein Formuar im 01.01.2001 Format erfolgt, wird das Datum erstmal gewandelt.
              PHP Code:
              function date2sql($datum=false

                  if (
              substr_count($datum'.') != 2
                      return 
              false
                  
              $d explode('.'trim($datum)); 
                  if (
              $d[2] < 100
                      
              $d[2] += 2000
                  if (! @
              checkdate($d[1], $d[0], $d[2])) 
                      return 
              false
                  return 
              sprintf('%04d-%02d-%02d'$d[2], $d[1], $d[0]); 

              }  
              $date1 date2sql($_REQUEST['von_datum']); 
              $date2 date2sql($_REQUEST['bis_datum']); 
              Und folgendes Select liefert die Datensätze:
              PHP Code:
              SELECT FROM tbl WHERE datum >= '".$date1."' AND datum <= '".$date2."' 
              Wobei die Variablen $von_datum und $bis_datum natürlich die Eingabefelder im Formular sind.

              Gruß Franz

              Comment


              • #8
                Woher weißt du, dass er mit PHP arbeitet?
                Woher weißt du, dass er Eingabefelder und Formulare hat?
                Seine Datumswerte sind in verschiedenen Feldern -> Beitrag 1
                Christian

                Comment


                • #9
                  Originally posted by Christian Marquardt View Post
                  Woher weißt du, dass er mit PHP arbeitet?
                  Woher weißt du, dass er Eingabefelder und Formulare hat?
                  Seine Datumswerte sind in verschiedenen Feldern -> Beitrag 1
                  Was stört Dich an meinem Vorschlag?
                  Es steht auch nichts Gegenteiliges. Du hast einen Vorschlag gemacht auf Grundlagen von wenigen Informationen und ich habe einen Vorschlag gemacht es anders zu lösen. Nur weil jahr monat tag in eigenen Feldern stehen, bedeutet dies nicht, dass mein Vorschlag nicht funktioniert. (z.B. CONCAT)

                  Es sind wenige Informationen im ersten Post und um mehr zu erhalten kann man über Vorschläge mehr Einzelheiten erfahren.
                  Der letzte Post von sharmuur mit "danke für die Tipps" scheint mir in seiner Angelegenheit nicht die Lösung gebracht zu haben.

                  Gruß Franz

                  Comment


                  • #10
                    Was stört Dich an meinem Vorschlag?
                    Hmm, dann könnte wir ja hier C++, Java, NET Assembler und andere Lösungen auf gut Glück posten, zumal er offenbar eine SQL-Lösung wollte und keine aus der Programmiersprache

                    Du hast einen Vorschlag gemacht auf Grundlagen von wenigen Informationen
                    ...die sich auf vorhandene Informationen bezogen

                    Der letzte Post von sharmuur mit "danke für die Tipps" scheint mir in seiner Angelegenheit nicht die Lösung gebracht zu haben.
                    Aha
                    Christian

                    Comment


                    • #11
                      Ich finde meine Lösung am besten
                      docendo discimus

                      Comment


                      • #12
                        Hallo Jungs,

                        vielen Dank nochmal für die Zeit.
                        Es hat geklappt und zwar mit CONCAT().
                        Code:
                        $anfang="$post_vonJahr"."$post_vonMonat"."$post_vonTag";
                        $ende="$post_bisJahr"."$post_bisMonat"."$post_bisTag";
                        $abfrage="SELECT messwert FROM messung where standort='$post_standort_messwert' and parameter='$post_parameter_messwert' and CONCAT(jahr,monat,tag) BETWEEN '$anfang' and '$ende'";

                        Gruß
                        sharmuur

                        PS: FraHa hat gut erraten, dass ich mit PHP programmiere
                        Zuletzt editiert von sharmuur; 19.02.2010, 00:32.

                        Comment

                        Working...
                        X