MSSQL aktuelle Uhrzeit +- xx Minuten Toleranz

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

  • MSSQL aktuelle Uhrzeit +- xx Minuten Toleranz

    Hallo,

    Ich möchte von der aktuellen Uhrzeit & Datum alle Datensätze die 30 Min. vor der aktuellen Zeit waren und 30 Min. danach.

    In MySql sieht das wie folgt aus und funktioniert auch:

    //Alle DS des aktuellen Tages in denen aktuelle Uhrzeit +-30 Min. ist
    $query = ("SELECT * FROM Person WHERE letzterLogin BETWEEN ADDTIME( now( ) , -3000 ) AND ADDTIME( now( ) , 3000 ) ORDER BY letzterLogin");

    //Alle DS in denen aktuelle Uhrzeit +-30 Min. ist, unabhängig vom Datum. 3000 steht für 30 min und 00 sec
    $query = ("SELECT * FROM Person WHERE TIME(letzterLogin) BETWEEN TIME(ADDTIME( now( ) , -3000 )) AND TIME(ADDTIME( now( ) , 3000 )) ORDER BY letzterLogin");

    Nur brauch ich das jetzt für einen MSSQL Server 2000.
    NOW() und ADDTIME funktionieren bei MSSQL leider nicht.

    Das Feld letzterLogin ist vom TYP DATETIME und speichert im Moment, das Datum im folgenden Format (tt.mm.yyyy hh:mm:ss)

    DB_NAME und PERSON sind KONSTANTEN!!!


    Hab auch ein wenig Code vorbereitet und ein wenig geteste - ohne Erfolg

    //1800 entspricht 30 Min., gemessen wird in sec.
    $toleranz = "1800";
    $time = date("H:i:s");
    echo "Aktuelle Uhrzeit: $time";
    echo "<br/>";
    $time1 = date ("H:i:s", time() + ($toleranz));
    echo "Uhrzeit +30 Min: $time1";
    echo "<br/>";
    $time2 = date ("H:i:s", time() - ($toleranz));
    echo "Uhrzeit -30 Min.: $time2";
    echo "<br>";

    if (!defined('DB_NAME'))
    throw new Exception('Es wurde keine Datenbank definiert.');

    //Test mit getDate -->PHP Fatal error: Unsupported operand types
    $query = 'use '.DB_NAME.'; SELECT * FROM '.PERSON.' WHERE letzterLogin between "'.(getDate()-1/48) .'" AND "'.(getDate() + 1/48).'" ';

    //ALLE DS des aktuellen Tages innerhalb der Zeit-Toleranz (30 Min.) ADDTIME gibt es bei MSSQL NICHT
    $query = 'use '.DB_NAME.'; SELECT * FROM '.PERSON.' WHERE letzterLogin between $time2 AND $time1 ';
    -->Syntax Fehler

    Brauche beide Varianten:
    1. Alle DS des aktuellen Tages in denen aktuelle Uhrzeit +-30 Min. ist
    2. Alle DS in denen aktuelle Uhrzeit +-30 Min. ist, unabhängig vom Datum.

    Bin für jede Hilfe dankbar.

  • #2
    DATEADD ist dein Freund

    Kommentar


    • #3
      hallo,
      danke für deine antwort.

      kannst du mir mal für mein bsp. die anwort posten, bekomme immer ein PHP Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING zurück

      hier der query:

      $query = 'use '.DB_NAME.'; SELECT * FROM '.PERSON ' WHERE letzterLogin BETWEEN " '.DATEADD(Minute,-30,GETDATE()).' " AND
      " '.DATEADD(Minute,30,GETDATE()).' " ';

      Kommentar


      • #4
        wie kommst du denn darauf im 1. Argument das Wort Minute zuübergeben. Schau mal in die OH, bevor du irgendwas anwendest

        Kommentar


        • #5
          hab unter
          http://www.eulanda.de/inside/entwick...um/dateadd.htm
          nachgeschaut.

          wärst du so freundlich und würdest mir dann den richtigen syntax nennen.

          Kommentar


          • #6
            DU hast ein PHP-Syntax-Problem, wie die Fehlermeldung dir sagt.

            Wenn du gemäß Regeln mal die [PHP]-Tags verwenden würdest, könntest du anhand der bunten Farben ganz schön erkennen, was sache ist.

            Kommentar


            • #7
              ziemlich rauher umgangston in diesem forum.
              hab noch nicht soviel erfahrung mit php darum hab ich auch meine
              frage in ein forum gestellt.

              Kommentar


              • #8
                auf deiner angegebenen Seite steht:

                Argumente

                datepart

                Der Parameter, der angibt, für welche Datumseinheit ein neuer Wert zurückgegeben werden soll. Die Tabelle listet die Datumseinheiten und [color=red]Abkürzungen[/color] auf, [color=red]die von Microsoft® SQL Server™ erkannt werden.[/color]

                wie kommst du darauf Minute darein zu schreiben? und nimm den Tipp von Tobi zu Herzen!

                Kommentar


                • #9
                  hallo,

                  hab jetzt den syntax-fehler bereinigt. bleibt aber immer noch eine Kleinigkeit anzumerken.

                  Mein Query sieht so aus:

                  $query = 'use '.DB_NAME.'; SELECT * FROM '.PERSON. ' WHERE
                  letzterLogin BETWEEN DATEADD(MI,-60,GETDATE()) AND DATEADD(MI,60,GETDATE()) ';

                  wenn ich die query mittels print ausgebe, erhalte ich folgendes:
                  SELECT * FROM Person WHERE letzterLogin BETWEEN DATEADD(MI,-60,GETDATE()) AND DATEADD(MI,60,GETDATE()) Object id #2

                  Irgendwas passt mit dem DATEADD noch nicht so ganz.
                  Hat jemand eine Idee??

                  So das ganze ist ja momentan so aufgebaut, dass es nur für den aktuellen Tag mir die DS anzeigt.

                  Wie funktioniert das mit dem DATEADD, wenn ich alle DS haben will, die zwischen der Toleranzgrenze liegt?? Bsp. Alle DS die zw. 11.45 und 12.15 liegen unabhängig vom aktuellen Tagesdatum?

                  Ach übrigens, ich schau vorher schon erst selber nach in Büchern/Internet ob ich dort auf meine Probleme was finde, bevor ich in ein Forum gehe. Darum wäre es sehr hilfreich nicht nur für mich, wenn schon jemand was postet, diese dann auch mit einer kleinen Erklärung/Bsp. versieht, damit Benutzer, die noch nicht so viel Erfahrung mit PHP haben, das ganze dann auch verstehen.

                  Kommentar


                  • #10
                    Original geschrieben von nicolebi24
                    wenn ich die query mittels print ausgebe, erhalte ich folgendes:
                    SELECT * FROM Person WHERE letzterLogin BETWEEN DATEADD(MI,-60,GETDATE()) AND DATEADD(MI,60,GETDATE()) Object id #2
                    klar, das ist bei MySQL auch nicht anders
                    Irgendwas passt mit dem DATEADD noch nicht so ganz.
                    Nö, die Abfrage ist i.O.
                    Hat jemand eine Idee??
                    ja, PHP Grundlagen lernen http://de.php.net/manual/en/ref.mssql.php
                    Ach übrigens, ich schau vorher schon erst selber nach in Büchern/Internet ob ich dort auf meine Probleme was finde, bevor ich in ein Forum gehe. Darum wäre es sehr hilfreich nicht nur für mich, wenn schon jemand was postet, diese dann auch mit einer kleinen Erklärung/Bsp. versieht, damit Benutzer, die noch nicht so viel Erfahrung mit PHP haben, das ganze dann auch verstehen.
                    Beschreibungen und Beispiele findest du im Manual, hier geben wir nur Tipps zur Problemlösung. Man muss ja nicht nochmals alles niederschreibt, was schon Manual steht.

                    Kommentar


                    • #11
                      hi asp2php

                      danke für deinen Link.
                      Nur wo finde ich generell solche Sachen wie DATEADD usw.

                      Kennst du eine Seite auf der MySQL und MSSQL-Funktion
                      gegenüber stehen, die die gleiche Funktion haben.

                      Gruß
                      Nicole

                      Kommentar


                      • #12
                        Original geschrieben von nicolebi24
                        danke für deinen Link.
                        Nur wo finde ich generell solche Sachen wie DATEADD usw.
                        mysql.com

                        Kommentar


                        • #13
                          Original geschrieben von nicolebi24
                          Nur wo finde ich generell solche Sachen wie DATEADD usw.
                          die Online Hilfe (OH) von MS SQL Server reicht allemal, darin steht alles, von der Administration bis zur verfeinerte Einstellungen zur Optimierung des Servers und selbstverständlich auch die komplette Referenz über T-SQL
                          Kennst du eine Seite auf der MySQL und MSSQL-Funktion
                          gegenüber stehen, die die gleiche Funktion haben.
                          Nein, wozu? Lerne MySQL und lerne T-SQL dann wirst du schon wissen, was du einsetzen musst, einen Sinn für diese Gegenüberstellung sehe ich nicht. . Andererseits, eine Gegenüberstellung der Features der jeweiligen DBMS macht natürlich sinn.

                          Kommentar


                          • #14
                            Irgendwas passt mit dem DATEADD noch nicht so ganz.
                            Hat jemand eine Idee??


                            was passt darin nicht?

                            Ich könnte mir vorstellen, dass irgendwo nur das Datum bzw. Datum+0Uhr vorkommt, wohingegen der query-Ansatz auf Datum+Zeit gerichtet ist.

                            übrigens laut OH wäre MINUTE zulässig und als Abkürzung MI.

                            Kommentar


                            • #15
                              hallo phoenix,

                              also in der db wird im feld letzterLogin Datum und Uhrzeit gespeichert.
                              hab zum test auch nochmals einige DS angelegt. aber es kommen nicht die daten raus, die in der Toleranzgrenze sind - bzw. es kommen gleich gar keine DS raus.

                              Hat jemand sonst noch einen konstruktiven Vorschlag als in der OH nachzuschauen? Denke es ist im beiderseitigen Interesse dabei was zu lernen.

                              Kommentar

                              Lädt...
                              X