Je voudrais faire un serveur SQL pour sélectionner la sélection de la daterange de (il y a 2 heures) entre (il y a 1 heure)
Est-ce correct:
SELECT *
FROM tablename
WHERE dtdatetime BETWEEN DATEADD(hh, -1, GETDATE()) AND DATEADD(hh, -2, GETDATE())
hh
. Voici pourquoi .BETWEEN
. Voici pourquoi . De toute façon, le premier argument doit être le plus petit - votre problème est en fait que vous dites WHERE 2 BETWEEN 3 AND 1
et il ne retournera vrai que si vous le retournez à WHERE 2 BETWEEN 1 AND 3
. Allez-y et essayez-le - l'argument le plus petit doit être le premier. Mais vraiment, arrêtez tout de même d'utiliser BETWEEN
pour les requêtes de plage de dates.Voici à quoi devrait ressembler votre requête:
WHERE dtdatetime >= DATEADD(HOUR, -2, GETDATE())
AND dtdatetime < DATEADD(HOUR, -1, GETDATE());
Notez que cela donnera des résultats différents selon l'heure à laquelle vous l'exécuterez pendant l'heure actuelle. Par exemple, si vous l'exécutez à 12:32, cela donnera des données> = 10:32 et <11:32. Si vous voulez des données> = 10h00 et <11h00, qu'elles soient exécutées à 12h04 ou 12h32 ou 12h59, alors vous voulez plutôt ceci:
DECLARE @TopOfHour DATETIME;
SET @TopOfHour = DATEADD(HOUR, DATEPART(HOUR, GETDATE()), DATEDIFF(DAY, 0, GETDATE()));
SELECT ...
WHERE dtdatetime >= DATEADD(HOUR, -2, @TopOfHour)
AND dtdatetime < DATEADD(HOUR, -1, @TopOfHour);