IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

Datediff moins d'un jour


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 53
    Points : 21
    Points
    21
    Par défaut Datediff moins d'un jour
    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 ?

  2. #2
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    j'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 ?
    Non pas du tout DATEDIFF vous retourne bien le nombre d'heure d’écart entre les deux dates:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    declare @date datetime=getdate()
    declare @date2 datetime=dateadd(hour,-56,getdate())
     
    select DATEDIFF(hh,@date,@date2)
    Résultat:-56

    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.
    MCTS Database Development
    MCTS Database Administration

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Points : 1 234
    Points
    1 234
    Par défaut
    Si vous écrivez votre query comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT *
    FROM dbo.maTable
    WHERE maDate > DATEADD(dd, -1, GETDATE())
    vous pourrez alors tirez profit d'un indexe sur la date (ici : colonne maDate).
    De nombreuse autres écritures ne permettraient pas cela.
    Most Valued Pas mvp

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 53
    Points : 21
    Points
    21
    Par défaut
    Donc faire ma comparaison à l'aide d'un DATEADD au lieu d'un DATEDIFF serait plus intéressant en terme de performance ?

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    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 Envoyé par SergeJack
    vous pourrez alors tirez profit d'un indexe sur la date (ici : colonne maDate).
    Je vois invite à lire ce petit billet.

    @++

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2010
    Messages : 53
    Points : 21
    Points
    21
    Par défaut
    Merci, effectivement c'est très intéressant !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. DATEDIFF avec uniquement les jours ouvrés
    Par Inconnu_du_69 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 19/03/2009, 16h32
  2. [2.0] DateDiff et différence de jours
    Par franculo_caoulene dans le forum VB.NET
    Réponses: 9
    Dernier message: 18/03/2008, 15h10
  3. [MySQL] Annonces ayant moins de 2 jours
    Par heteroclite dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 01/10/2007, 23h28
  4. [MySQL] Afficher les enregistrements de moins de (x) jours.
    Par weelson@mac.com dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 19/02/2007, 19h31
  5. requette where date="moins de 2 jours"
    Par nmerydem dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/05/2004, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo