comment interroger objet Datetime par jour?
je veux interroger une table en fonction d'une date en particulier, mais le problème est le type de données de ce champ est de type datetime
select * from Supplier where modified_Date='2011-05-07 12:52:16.830'
cette requête est de retour suite
mais
select * from Supplier where modified_Date='2011-05-07'
il n'y a pas de résultat
OriginalL'auteur Nighil | 2011-05-23
Vous devez vous connecter pour publier un commentaire.
SQL Server 2008 est un
DATE
type de données. Vous pouvez lancer votreDATETIME
àDATE
et effectuer la comparaison.Référence: DateTime TransactSQL
OriginalL'auteur Lieven Keersmaekers
Vous devez autoriser pour la composante temporelle, car
2011-05-07 <> 2011-05-07 12:52:16.830
Ou changer sur une plage de requête de type
...ou en fonte à ce jour depuis que vous utilisez SQL Server 2008
À partir d'un point de vue des performances, utiliser la première. Ou ont indexé colonne calculée qui ne le voter pour vous et vous filtrez sur ce
n'est ce pas? Ne peux pas tester maintenant. La pensée de ce que connect.microsoft.com/SQLServer/feedback/details/653206/...
Oui, il ajoute un calcul scalaire pour le plan qui donne aux deux extrémités de la gamme de chercher. Voir connect.microsoft.com/SQLServer/feedback/details/526431/...
OriginalL'auteur gbn
Convertir la colonne en date dans votre requête select apportera les résultats.
OriginalL'auteur eddedeed
Juste pour poster une syntaxe alternative pour gbn réponse, vous pouvez également utiliser
BETWEEN
:EDIT: Vous devez spécifier le temps de la fin, comme
BETWEEN
par défaut de minuit qui permettrait le retour des lignes supplémentaires dans ce cas.De BOL:
BETWEEN
sera de retour les mauvais résultats. Il comprendra'2011-05-08 00:00:00
c'est faux, il ne fonctionnera pas
Toutes mes excuses, vous avez raison,
BETWEEN
comprendra minuit sur la le 8e. Avez édité ma réponse pour refléter le fait que, elle permet de faire la requête moche 🙂Votre réponse ne fonctionne toujours pas, comme
'2011-05-07 23:59:59:999'
obtient arrondi à'2011-05-08 00:00:00:000'
.Between
est préférable d'éviter pour ce type de requête.Comme Nighil est à l'aide de SQL Server 2008, je m'attendais à
DATETIME2
à être utilisé (comme recommandé par MS). Pour l'utiliser avec DATETIME modifier la dernière de 9 à 7. Mais c'est de se salir donc, comme vous le dites, il est préférable d'éviter lesBETWEEN
dans ce scénario. Je vais supprimer ma réponse mais je pense que je vais le laisser à aider les autres à éviter de tomber dans le même piège que j'ai fait 🙂OriginalL'auteur Tony