SQL Server: récupération des enregistrements entre deux dates?
En SQL j'écris un SELECT
déclaration d'extraire des données entre deux dates, à l'aide de between and
Ex:
select *
from xxx
where dates between '2012-10-26' and '2012-10-27'
Mais le nombre de lignes retournées sont de 26, pas 26 et 27.
Pouvez-vous m'aider? Merci.
source d'informationauteur Ssasidhar
Vous devez vous connecter pour publier un commentaire.
Que d'autres ont répondu, vous avez probablement un
DATETIME
(ou d'autres): variation de la colonne, et non uneDATE
type de données.Voici un état qui fonctionne pour tous, y compris
DATE
:@Aaron Bertrand a blogué à ce sujet: Ce n'
et le diable ont-ils en commun?
Vous avez besoin d'être plus explicite et ajoutez le début et la fin des temps, jusqu'à la millisecondes:
La base de données peut très bien interpréter
'2012-10-27'
comme'2012-10-27 00:00:00.000'
.Votre question n'a pas demander comment utiliser ENTRE correctement, plutôt demandé de l'aide avec la façon inattendue résultats tronqués...
Comme mentionné/allusion à dans les autres réponses, le problème est que vous avez des segments de temps en plus pour les dates.
Dans mon expérience, à l'aide de la date de diff est vraiment extra usure ou déchirure sur le clavier. Il vous permet de vous exprimer exactement ce que vous voulez, et vous êtes couvert.
à l'aide de datediff, si la première date est avant le deuxième jour, vous obtenez un nombre positif. Il y a plusieurs façons d'écrire ci-dessus, par exemple en ayant toujours le terrain d'abord, puis de la constante. Juste retournement de l'opérateur. C'est une question de préférence personnelle.
vous pouvez être explicite sur si vous voulez être inclusif ou exclusif, des points de terminaison par la chute d'un ou deux signes égal.
ENTRE le travail dans votre cas, parce que les points de terminaison sont à la fois supposé être minuit (c'est à dire les DATEs).
Si vos points d'accès ont également été DATETIME, à l'aide de ENTRE peut exiger encore plus de la coulée.
Dans mon esprit, DATEDIFF a été mis dans notre vie pour nous isoler ces questions.
Sans ambiguïté la façon d'écrire c'est (c'est à dire augmenter le 2ème jour d'ici le 1er et le rendre
<
)Si vous utilisez SQL Server 2008 ou supérieur, vous pouvez la sécurité JETÉ comme de JOUR, tout en conservant SARGabilitypar exemple
Ceci indique explicitement SQL Server que vous êtes uniquement intéressé par la partie DATE de la
dates
colonne pour la comparaison avec le ENTRE de gamme.Essayez ceci:
essayez d'utiliser la requête suivante