Une meilleure Façon de Gérer les Dates dans la Clause where
Je me demandais quel type de requête est préférable d'utiliser:
SELECT * FROM table WHERE DATE >= '2010-7-20' AND DATE <= '2010-7-24'
OU
SELECT * FROM table WHERE DATE_SUB('2010-07-24',INTERVAL 4 DAY) <= DATE
- Excellent les gars, la deuxième requête ne peut produire des résultats différents. Aussi je souhaite que je pourrais choisir deux réponses correctes.
Vous devez vous connecter pour publier un commentaire.
J'ai toujours utiliser la
>=
et<
combinaison.Donc, si vous voulez serch pour une de ces quatre jours, vous utilisez
Cela garantit que vous obtenez seulement les dates de votre interesrted, même si il y a un mixtrure de acutal dates(n'ayant pas le temps de composants ) et datetimes.
Donc si vous aviez une date stockée comme 2010-07-20 09:00:00 et une date stockée comme 2010-07-20 ils seraient tous les deux inclus, mais la date 2010-07-24 voulait pas.
Je n'ai pas confiance Entre!
Je ne suis pas sûr à propos de MySQL, mais ENTRE dans SQL Server serait de vous donner inclusive résultats de manière à ce qu'une ligne avec une date de 2010-07-24 serait inclus quand je ne m'attends pas à être si vous vouliez que les quatre date de la période à partir de la 20e? (20, 21, 22 & 23)
Donc, à TOUTE date de la 24e ne devrait pas être inclus, même si il était minuit..!
Aussi...
Typiquement en utilisant les fonctions de vos critères de prévenir l'optimiseur à l'aide de n'importe quel index..! Quelque chose d'être conscient de.
Plus Important...
La deuxième requête ne produisent pas les mêmes résultats que la première requête...Est-il là?
utilisation entre?
SELECT * FROM table WHERE DATE BETWEEN '2010-7-20' AND '2010-7-24'
En fonction des données et des règles de gestion, les deux requêtes produire des résultats différents.
La première requête, qui peut être ré-écrite pour utiliser ENTRE les deux (pour la lisibilité, pas de changement dans la performance), c'est la garantie pour retourner les lignes dont
date
valeur de la colonne est entre 20 juillet à 00:00:00 et 24 juillet à 00:00:00.La deuxième requête renvoie les enregistrements dont
date
valeur de la colonne est supérieure ou égale à 20 juillet, 00:00:00. Si il y a des dates dans le futur, cette requête renvoie ceux aussi bien. Parce que, par défaut, une contrainte est définie uniquement ladate
colonne si aucune valeur n'est fournie - vous besoin d'une contrainte de vérification (non pris en charge par MySQL sur n'importe quel moteur si la syntaxe existe) ou le déclencheur afin de s'assurer que les données correspondent à vos règles de gestion.Conclusion
Être plus explicite est le plus facile à comprendre, ce qui le rend plus facile à maintenir.
Vos exemples ne produisent pas le même résultat!
La première serait mieux avec ENTRE - recherche entre deux dates
L'autre juste recherche des entrées avec DATE => 2010-07-20
Ces sont totalement différents des opérations!