Meilleur moyen de comparer des dates sans temps dans SQL Server
select * from sampleTable
where CONVERT(VARCHAR(20),DateCreated,101)
= CONVERT(VARCHAR(20),CAST('Feb 15 2012 7:00:00:000PM' AS DATETIME),101)
Je veux comparer la date sans temps
Est question ci-dessus est ok? ou d'autres de meilleure solution que vous suggérez
- Je suis à l'aide de SQL Server 2005
- Date d'enregistrement au format UTC sur le serveur
- Les utilisateurs en fonction de ces données appartiennent autre fuseau horaire
source d'informationauteur Ali
Vous devez vous connecter pour publier un commentaire.
Ne pas utiliser de convertir - qui implique des chaînes pour aucune raison. Un truc est qu'un datetime est en fait un numérique, et les jours est la partie entière (le temps est la fraction décimale); par conséquent, la journée est la ÉTAGE de la valeur: c'est alors que des maths, pas de chaînes beaucoup plus rapidement
Dans votre cas, pas besoin de convertir le retour de type datetime; et à l'aide d'une gamme de permet de la plus efficace des comparaisons (surtout si indexée):
Distribution Simple à
Date
permettra de résoudre le problème.Description
Ne pas convertir votre Date varchar et de comparer car les chaînes de caractères comparaison n'est pas rapide.
Il est beaucoup plus rapide si vous utilisez
>=
et<
pour filtrer votreDateCreated
colonne.Si vous n'avez pas de paramètre (comme dans votre exemple, une chaîne de caractères), vous devez utiliser le Format ISO
<Year><Month><Day>
.Échantillon
Selon votre échantillon
Plus D'Informations
L'inconvénient est que vous êtes un moulage de la colonne de filtre.
Si il existe un index sur la colonne de filtre, alors, puisque vous êtes de la coulée, le moteur SQL ne peut plus utiliser les index pour filtrer la date la plus efficace.
Après des tests de performance à la plupart des solutions évidentes, voici mon résultat:
Résultat:
J'ai essayé de le faire avec autant de précision que possible, désolé pour le manque de commentaires. Se sentir libre pour exécuter les tests pour vérifier les résultats d'ensemble.
Utiliser 112 CONVERTIR du format
ou
si votre version de sql server 2008+ utilisation
DATE
typeCela permettra aussi de comparer votre colonne avec la date donnée
sans tenir compte du facteur temps