|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Alexandre HardyInscription : novembre 2010 Messages : 46 ![]() |
Bonjour,
J'ai un procédure stockée censée vérifier qu'un enregistrement date de plus ou moins d'un jour ( soit 24h ). En faisant : DATEDIFF(hh,@Date,GETDATE())>=24j'ai l'impression que la fonction ne s’intéresse qu'aux heures et ne prend donc pas en compte les jours... Est-ce normal ? |
|
|
00
|
|
|
#2 | |||
|
Membre Expert
![]() |
Citation:
Code :
faites un PRINT du résultat dans votre cas pour voir la valeur retournée par votre DATEDIFF
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir. |
|||
|
|
00
|
|
|
#3 | ||
|
Membre chevronné
![]() ![]() Inscription : juillet 2006 Messages : 1 194 ![]() |
Si vous écrivez votre query comme suit
Code :
De nombreuse autres écritures ne permettraient pas cela. |
||
|
|
00
|
|
|
#4 |
|
Invité régulier
![]() Alexandre HardyInscription : novembre 2010 Messages : 46 ![]() |
Donc faire ma comparaison à l'aide d'un DATEADD au lieu d'un DATEDIFF serait plus intéressant en terme de performance ?
|
|
|
00
|
|
|
#5 | |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 668 ![]() |
Bonjour,
Ce n'est pas le fait d'uitliser DATEDIFF() ou DATEADD() qui feront que votre requête sera plus performante. SQL Server maintient des statistiques de distribution des valeurs pour chacune des colonnes d'une table, et sur les index. En revanche, il ne maintient pas de statistiques sur la différence en heures ou en jours entre les valeurs de date d'une colonne et la date du jour. Donc il ne peut pas prévoir la quantité de lignes qui vérifient votre prédicat. Donc il choisira de lire toute la table. Dans la requête de Sergejack, comme DATEADD(dd, -1, GETDATE()) est une constante, et que son prédicat exprime un filtre direct sur la colonne maDate, SQL Server est capable d'estimer le nombre de lignes de la table qui vérifieront le prédicat. C'est pour cela que Sergejack a écrit : Citation:
@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
|
10
|
|
|
#6 |
|
Invité régulier
![]() Alexandre HardyInscription : novembre 2010 Messages : 46 ![]() |
Merci, effectivement c'est très intéressant !
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com