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 Date avec variable mois et année


Sujet :

MS SQL Server

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 34
    Points : 34
    Points
    34
    Par défaut Comparer Date avec variable mois et année
    Bonjour

    Je viens vous demander de l'aide pour quelque chose qui me parait pourtant très simple.
    J'ai une table "MaTable" avec une colonne DateValidite, je voudrais dans une procédure récupérer les lignes qui correspondent a une date validite qui concerne l'année et le mois passer en parametre.

    J'ai donc fait une PS ou je récupère les infos de ma table "MaTable" ou l'année est égal a mon paramètre mais je trouve que cette Ps est très longues a s'exécuter

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SELECT * 
    FROM MaTable 
    Where YEAR(DateValidite) = @MonAnnee 
    AND    MONTH (DateValidite) =  @MonMois
    J'avais penser passer par un BetWeen mais comme j'ai que le mois et l'année j'aurai besoin de récupere aussi le dernier jour du mois voulu afin d'avoir un parametre DateDebut = "01/ @MonMois/@MonAnnee " et DateFin = "@DernierJour/ @MonMois/@MonAnnee "

    Je ne vois pas d'autre solution est celle ci ne me paraissent pas optimal

    Auriez vous d'autre solution a me proposer ?

    Merci d'avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    1) la meilleure : implanter dans votre base une table de calendrier, dont une des colonnes est la date de fin de mois
    2) utiliser la fonction EOMONTH

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,

    En effet, l'application des fonction YEAR et MONTH empeche l'utilisation d'index.

    Vous pouvez cependant trouver le début et la fin du mois à partir de vos données en entrée (mois et année)

    Mais plus simple, vous pouvez prendre les données supérieures ou égale au début du mois, et strictement inférieures au début du mois suivant :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    SELECT * 
    FROM MaTable 
    Where DateValidite >= DATEADD(MONTH, (@MonAnnee - 2000) * 12 - 1 + @MonMois , '20000101')
    AND   DateValidite < DATEADD(MONTH, (@MonAnnee - 2000) * 12 + @MonMois , '20000101')

Discussions similaires

  1. Comparer date avec VBA
    Par Radaghast dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/07/2012, 21h50
  2. Comparer Date avec intervalle
    Par synolog dans le forum Langage
    Réponses: 4
    Dernier message: 06/06/2012, 10h42
  3. Réponses: 3
    Dernier message: 31/01/2011, 18h26
  4. Retourner une date avec le mois précédent
    Par labolabs dans le forum PL/SQL
    Réponses: 2
    Dernier message: 28/12/2009, 10h04
  5. recherche date format (jj mois(lettres) année)
    Par _Jnie_ dans le forum VBA Word
    Réponses: 6
    Dernier message: 09/07/2009, 01h12

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