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

Langage SQL Discussion :

BETWEEN et Dates sous SQL Server 2005


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut BETWEEN et Dates sous SQL Server 2005
    Bonjour, je ne sais pas comment utiliser de la manière la plus simple la comparaison entre deux dates en prenant en compte uniquement le mois et l'année donnée par le client.

    J'aimerais faire une requête paramétrée (C#).

    J'ai essayé comme ceci (pas paramétré) mais il ne veut rien savoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Select * FROM T_evenements
    WHERE  date_fin between ((MONTH(T_Evenements.Date_Fin) = '10') AND (YEAR(T_Evenements.Date_Fin) = '2009')) AND
     ((MONTH(T_Evenements.Date_Fin) = '11') AND (YEAR(T_Evenements.Date_Fin) = '2009'))
    il me fait une erreur = syntaxe incorrecte vers "="

    Avez vous une solution plus simple?

    Edit: Mon champs de date est en "DateTime"

    Merci d'avance pour votre aide

  2. #2
    Membre éclairé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Par défaut
    en terme de performance je pense qu'il vaudrait mieux modifier les dates, et mettre le 1er jour du mois de la 1ere date, et le dernier jour du mois de la derniere date:

    select Dateadd(Day, 1 - Day('10/10/2009'), '10/10/2009'), DATEADD(MONTH, 1, DateAdd(Day, 1-Day('15/11/2009'),'15/11/2009'))-1

    ça donnerait quelque chose de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM T_evenements
    WHERE  date_fin BETWEEN Dateadd(Day, 1 - Day('10/10/2009'), '10/10/2009')
                           And DATEADD(MONTH, 1, DateAdd(Day, 1-Day('15/11/2009'),'15/11/2009'))-1
    Où bien entendu tes deux date sont: 10/10/09 et 15/11/09

    A+
    juva

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut
    Salut Juvamine,

    Merci pour ta réponse.

    J'ai un peu modifier ce que tu m'as donné (à vrai dire j'ai pas trop compris le fonctionnement de cette requête si tu pouvais m'expliquer ça serait bon pour mon amélioration personnelle).

    voilà ce que ça donne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WHERE  date_fin BETWEEN Dateadd(Day, 1 - Day('01/10/2009'), '01/10/2009')
                           AND  DATEADD(Day, 1 - Day('01/11/2009'), '01/11/2009')
    Ceci me donnerait tout ce qu'il y'a entre le début du mois d'octobre (1er inclu) jusqu'au début du mois de novembre (j'aimerais exclure le premier du mois).

    Les utilisateurs choisiront les dates (du début <date> à début <date>)

    Encore merci

  4. #4
    Membre éclairé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Par défaut
    dans mon exemple:
    si tu fournis les dates 10/10/09 et 15/11/09
    la requete te retournera tout ce qu'il y a entre le 01/10/09 et le 30/11/09

    Explication:
    1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dateadd(Day, 1 - Day('10/10/2009'), '10/10/2009')
    : te donne le 1er jour du mois (je retranche le nombre de jour + 1). Pour le 10 octobre je retranche 10-1 = 9
    (comme dateAdd est fait pour ajouter on écrit 1 - 10 = -9)


    2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATEADD(MONTH, 1, DateAdd(Day, 1-Day('15/11/2009'),'15/11/2009'))-1
    Si on décompose:
    a)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DateAdd(Day, 1-Day('15/11/2009'),'15/11/2009')
    sur le même principe que tout a l'heure je récupère le 1er jour du mois en cours (01/11/09)
    b) Ensuite je lui ajoute 1 mois avec J'obtiens 01/12/09
    c) Je retranche 1 jour (le -1) et j'obtiens 30/11/09
    Ne connaissant pas le dernier jour d'un mois (28,29,30,31), il faut partir du principe que c'est le 1er jour du mois suivant, moins 1 jour

    J'espère avoir été clair !

    A+
    juva

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    81
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2009
    Messages : 81
    Par défaut
    Ah d'accord. Merci je comprends mieux.

    J'ai regardé les valeurs avec un select, Comme je veux faire ça me donnera du 2009-10-01 00:00 (donc début du mois) jusqu'au 2009-11-01 00:00 (début du mois aussi donc en gros tout le mois du 10).

    Maintenant va falloir trouvé un moyen de paramétrer tout ça .

    Enfait le jour que tu donnes au mois n'est pas pris un compte .

    Merci et bonne journée!

  6. #6
    Membre éclairé Avatar de juvamine
    Profil pro
    Chef de projet MOA
    Inscrit en
    Mai 2004
    Messages
    414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2004
    Messages : 414
    Par défaut
    Au vu de ta première demande on avait vraiment l'impression que tu voulais ET le mois d'octobre ET le mois de novembre.
    C'est pour cela que j'avais fait ma requête comme ça...

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

Discussions similaires

  1. Initialisation date sous SQL SERVER 2005
    Par toutounesan dans le forum Développement
    Réponses: 4
    Dernier message: 28/05/2011, 13h29
  2. declarer un attribut date sous sql server 2005
    Par mia06 dans le forum Développement
    Réponses: 1
    Dernier message: 16/05/2011, 10h03
  3. Acces concurrentiel sous sql server 2005
    Par Marco77 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 07/02/2007, 15h53
  4. Réponses: 1
    Dernier message: 13/12/2006, 14h18
  5. Importé un fichier excel sous SQL Server 2005
    Par summer91 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 01/05/2006, 10h52

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