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 :

Clause Between dans une vue


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Clause Between dans une vue
    Bonjour à tout le monde,

    Je viens de créer une vue pour récupérer des données issues de plusieurs tables dont voici la requête qui me permet de l'alimenter, dont voici la syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT     TOP 100 PERCENT dbo.tblUser.UserName, dbo.tblUser.FullName, SUBSTRING(dbo.tblUserAttribute.AttributeValue, 1, 10) AS DateCreation
    FROM         dbo.tblUser INNER JOIN
                          dbo.tblUserAttribute ON dbo.tblUser.UserID = dbo.tblUserAttribute.UserID
    WHERE     (dbo.tblUserAttribute.AttributeName = 'whenCreated') AND (dbo.tblUserAttribute.AttributeValue IS NOT NULL)
    ORDER BY dbo.tblUser.UserName
    Cette vue contient donc les données suivantes (le type de caractére se trouvant entre parenthéses)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    UserName (caractéres)      |   FullName (caractéres)      |   DateCreation (caractéres)
    ------------------------------------------------------------------------------------
     
    nFrost                     |      Nico Frost              |    23/06/2005
    ntesst                     |      Nico 0001              |    03/10/2005
    nFrost                     |      Nico Frost              |    10/06/2004
    nFrost                     |      Nico Frost              |    03/02/2003
    nFrost                     |      Nico Frost              |    23/12/2002
    nFrost                     |      Nico Frost              |    22/06/2005
    Et bizarrement quand je construis ma requête de selection pour savoir qui a eu son identifiant crée entrele 01/01/2003 et 31/12/2004 je me retrouve avec tous mes enregistrements...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT     *
    FROM         vueUser
    WHERE     (DateCreation BETWEEN N'01/01/2003' AND N'31/12/2004)

  2. #2
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Salut, et bienvenue sur ce forum,

    - Sous quel SGBD travailles-tu ? (cf règles du forum)
    - Tes dates dont stockés dans un champ de type chaîne ou date ?
    - Quel que soit le SGBD, je n'ai jamais vu une telle syntaxe dans le between :

    Sous Oracle, avec un champ de type DATE, la requête s'écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT mesChamps
      FROM vueUser
     WHERE DateCreation BETWEEN TO_DATE('01/01/2003', 'dd/mm/yyyy') AND TO_DATE('31/12/2004', 'dd/mm/yyyy')
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Bonjour et je te remercie de me répondre

    Pour information, je suis actuellement Sous SQL Server 2000, ensuite comme tu me le suggéres mon champ CreationDate est un champ de type string. Concernant mon champ CreationDate j'aurais pu faire un cast

    concernant between c'est sql server qui corrige l'orthographe aprés moi

  4. #4
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    Si tu veux utiliser un BETWEEN sur une fourchette de date en VARCHAR, c'est normal que ça te ramène "tout".

    Le souci majeur (d'après moi) est le suivant :

    si on regarde tes données,
    '01/01/2003' < '23/06/2005' < '31/12/2004' puisque '01' < '23' < '31'

    Donc stocker les dates dans des chaînes au format jj/mm/yyyy revient à considérer le jour comme critère de tri prépondérant dans la date, puis le mois, puis l'année

    Essaye de faire un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT mesChamps
      FROM vueUser
     WHERE CAST(DateCreation AS DATE) BETWEEN CAST('01/01/2003' AS DATE) AND CAST('31/12/2004' AS DATE)
    mais la manière dont sont gérées les données serait à revoir si tu en as les moyens : un type date pour le champs dateCreation me paraît incontournable.
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je te remercie je viens de trouver mon erreur, j'ai réussi à forcer la conversion de date pour simplifer un maximum, et là ça fonctionne

  6. #6
    Xo
    Xo est déconnecté
    Expert confirmé
    Avatar de Xo
    Inscrit en
    Janvier 2005
    Messages
    2 701
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 701
    Points : 4 238
    Points
    4 238
    Par défaut
    OK

    Merci de penser à marquer le sujet comme "Résolu" alors (bouton portant ce nom, en bas du sujet)
    "Ce que l'on conçoit bien s'énonce clairement,
    Et les mots pour le dire arrivent aisément." Nicolas Boileau

    "Expliquer empêche de comprendre si cela dispense de chercher"

    Quiz Oracle : venez tester vos connaissances !

    La FAQ Oracle : 138 réponses à vos questions
    Aidez-nous à la compléter

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/07/2014, 16h32
  2. SQL 2005 Clause ORDER BY dans une vue
    Par Philippe Robert dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 02/10/2011, 18h18
  3. Réponses: 16
    Dernier message: 17/06/2005, 15h44
  4. Paramètres possibles dans une vue ms sql server
    Par lutin2003 dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 30/03/2005, 19h03
  5. Insérer dans une Vue ordonnée
    Par biroule dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 27/09/2004, 15h27

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