SQL Abfrage Problem
sunshine
- datenbank
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
Danke, konnte mein Problem soch selbst lösen:
Lösung:
SELECT *
FROM userverwalt
WHERE (DATEDIFF([year], userludate, GETDATE()) > 3)
sunshine
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
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
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
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