sunshine: SQL Abfrage Problem

Hallo alle zusammen,

in einer DB-Tabelle habe ich Useranträge abgelegt. Diese Useranträge sollen angezeigt werden, wenn Sie älter als 90 Tage des aktuellen Datums sind.

Wie muss hierfür die SQL-Abfrage aussehen - verwendete DB ist der MS SQL Server von Microsoft.

Kann mir da jemand helfen?

Thanx
sunshine

  1. Danke, konnte mein Problem soch selbst lösen:

    Lösung:

    SELECT     *
    FROM         userverwalt
    WHERE     (DATEDIFF([year], userludate, GETDATE()) > 3)

    sunshine

  2. Hi,

    in der Hoffnung, dass du den Zeitstempel für den "Userantrag" auch
    in einem der korrekten Formate (z.b. datetime) angelegt hast:

    SELECT
      [feld, feld, feld, feld]
    FROM
      [tabelle]
    WHERE
      DATEDIFF(day, [datetimefeld], getdate()) > 90

    Reference: MS SQL Server Books Online, Transact-SQL Referenz, DATEDIFF

    HIH, Ciao, Frank

    1. yo,

      SELECT
        [feld, feld, feld, feld]
      FROM
        [tabelle]
      WHERE
        DATEDIFF(day, [datetimefeld], getdate()) > 90

      wenn ich die mssql funktion datediff richtig verstanden habe, dann funktioniren beide lösungen nicht. je nachdem ob day oder year angebenen wurde, gibt die funktionen einen wert zurück, die entweder nur den tag eines jahres berüchsichtig oder nur das jahr.

      bespiel aus dem internet:

      SELECT DATEDIFF(Year,'2002-12-31 23:59:59.997', '2003-01-01 00:00:00.000')

      würde eins ergeben, obowhl nur milisekungen dazwischen liegen. das gleiche mit day, würde ebenfalls eins ergeben. die funktion berechnet also nicht immer die absolute zeitdifferenz, sondern abhaängig von dem wert, den man haben will. du müsstest also eventuell ms für millisekunden angeben, damit alles berücksichtig wird.

      Ilja

      1. Hi,

        ... dann funktioniren beide lösungen nicht.

        ist schlicht inkorrekt. Sie bieten lediglich eine gewisse
        Ungenauigkeit.

        Der erste Parameter von DATEDIFF gibt (machen wir's mal umgangs-
        sprachlich) die Unschärfe der Berechnung an.

        Der ermittelte Unterschied ist größer als 0 (Tage) aber kleiner
        als 1 (Tag). Da die Ergebnisunschärfe mit 'Tag' angegeben ist
        und der Rückgabewert der DATEDIFF Funktion ganzzahlig ist, kann
        also nur 1 rauskommen.

        <quote>DATEDIFF erzeugt einen Fehler, wenn das Ergebnis außerhalb
        des Bereichs für ganze Zahlen liegt. Bei Millisekunden beträgt der
        maximale Zeitraum 24 Tage, 20 Stunden, 31 Minuten und 23,647
        Sekunden. Bei Sekunden sind dies maximal 68 Jahre.</quote>
        ** Quelle: MS SQL Books Online, Transact SQL Reference.

        Wenn eine genaue (Fließkomma-)Anzahl von 24 Std.-Tagen bzw. 1440
        Minuten-Tagen benötigt wird, sollte man die Sache vielleicht so
        angehen:

        SELECT CAST(DATEDIFF(minute,[datecolumn],getdate()) AS DECIMAL)/1440

        ich hoffe, die Erklärung hat zum Verständnis beigetragen ...

        Ciao, Frank

        1. Hi,

          ... dann funktioniren beide lösungen nicht.

          ist schlicht inkorrekt. Sie bieten lediglich eine gewisse
          Ungenauigkeit.

          ein rein fachlicher, aber grundloser Streit. Fargen wir doch einfach Mr.Check, was funktionieren ist:
           http://app.mr-check.de/a31db05310e9661a316a6a618b708208/v2.0/Mrcheck.php?CID=tanto1&SB=funktionieren

          ich hoffe, die Erklärung hat zum Verständnis beigetragen ...

          Dito.

          Gruss,
          Ludger