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

MS SQL Server Discussion :

comparer deux colonnes datetime sans tenir compte de HH:MM:SS


Sujet :

MS SQL Server

  1. #1
    Membre éprouvé
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Par défaut comparer deux colonnes datetime sans tenir compte de HH:MM:SS
    bonjour, j'ai deux colonnes en datetime, je veux les comparer mais l'heure, minut et seconde ne doivent pas affecter ma comparaison, j'ai converti les dattime en smalldatetime, mais ca n'a pas marché, vous avez une idée ?

  2. #2
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Août 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 2
    Par défaut
    Bonjour,

    Essaye une comparaison en enlevant les HH:MM:SS :

    CONVERT(VARCHAR, date1, 103) = CONVERT(VARCHAR, date2, 103)

    103 permet d'afficher la date sous la forme "jj/mm/aaaa".

  3. #3
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Par exemple, faire simplement une comparaison année + numéro du jour dans l'année :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DATEPART(YEAR, Date1) = DATEPART(Year, Date2) AND 
    DATEPART(DAYOFYEAR, Date1) = DATEPART(DAYOFYEAR, Date2)

  4. #4
    Membre Expert Avatar de Jinroh77
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Février 2006
    Messages
    1 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Février 2006
    Messages : 1 964
    Par défaut
    Ou si vous êtes en SQL Server 2008, un cast en DATE et c'est réglé

  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 : 43
    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
    Par défaut
    Bonjour,

    Le problème, c'est que si un tel prédicat est utilisé dans la clause WHERE d'une requête, alors celui n'est pas sargable (à vérifier sous SQL Server 2008), et la requête ne sera donc pas performante.
    On peut passer outre en ajoutant une colonne calculée, et en l'indexant

    @++

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2003
    Messages : 733
    Billets dans le blog
    8
    Par défaut
    Depuis SQL Server 2008 le cast datetime en date fait que l’optimiseur saura toujours utiliser l’index établi sur le champ de type datetime (à l'image de like 'aaa%' pour un champ varchar puisque la date constitue le début datetime)
    Donc, à priori, il faut toute fois faire des tests, la clause where reste sargable.

    C’est bien expliqué dans le blog de mikedavem ici
    Il faut utiliser la fonction CAST (pas de convert varchar etc..)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CAST(date1 AS DATE) = CAST(date2 AS DATE)

Discussions similaires

  1. [XL-2010] Faire une somme d'une colonne sans tenir compte des dates
    Par madrunner dans le forum Excel
    Réponses: 18
    Dernier message: 14/08/2014, 18h43
  2. [Toutes versions] Boucler sans tenir compte de la colonne masquée
    Par Aurianelm dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 21/03/2013, 13h46
  3. Réponses: 2
    Dernier message: 17/07/2008, 20h31
  4. Réponses: 6
    Dernier message: 19/01/2008, 16h52
  5. faire une recherche sans tenir compte de la casse
    Par richard038 dans le forum SQL
    Réponses: 5
    Dernier message: 11/10/2005, 09h07

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