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 :

problème avec between


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 2
    Par défaut problème avec between
    Bonjour,
    J'ai une liste de valeurs du type

    Champ1
    CRA
    CRB
    CRC
    CRD
    CR1
    CR2

    et j'ai une table ou j'ai une correspondance du type

    Debut Fin Valeur
    CRA CR9 ABCD

    Lorsque je fais mon instruction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * from xxx,yyy
     
    where 
    Champ1 between Debut and Fin
    Rien n'est extrait.

    Je pense qu'il s'agit d'un probleme ascii vs EBCDIC ,
    Mais comment régler ce problème.

    Merci de votre aide.

    Philippe

  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 : 43
    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
    Par défaut
    BETWEEN sur des charactères!
    Le between est exclusif (correspond a > and < et non à >= and <=)

    Passez par des clef technique comme un AUTO INCREMENT...

  3. #3
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 713
    Par défaut
    Le between est exclusif
    depuis quand ?

    BETWEEN sur des charactères
    BETWEEN fonctionne sur des caractères, date, numériques (mais pas sur les TEXT et autres BLOB)

    Donc le problème est ailleurs.
    Il est probable que dans le classement par défaut de la base,
    'CRA' vienne après 'CR9' et donc ne puisse pas renvoyer de valeur.

    Pour tester, exécuter le test suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE #TEST (Champ varchar(50))
     
    INSERT INTO #Test values('CR9')
    INSERT INTO #Test values('CRA')
     
    SELECT * FROM #Test ORDER BY Champ
     
    DROP TABLE #Test
    Vous aurez certainement :
    Champ
    --------
    CR9
    CRA
    Du coup, si 'CR9' vient avant 'CRA' alors
    BETWEEN 'CRA' AND 'CR9' ne peut rien renvoyer
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  4. #4
    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 : 43
    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
    Par défaut
    Je me confonds en excuse BETWEEN n'est pas exclusif!
    C'est çà de répondre un dimanche matin :-)

    Bien sûr que le BETWEEN fonctionne sur les caractères je suis seulement choqué de son utilisation, résultat d'une modélisation souvent désastreuse (je suis payé à temps plein pour reprendre les applications "modélisées" par des développeurs qui sont tombées en prod...).

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Cela peut être une modélisation parfaitement correcte car elle répond en totalité à la forme normale domaine clef !
    J'avais hélas donné un exemples de cette forme normale sur wikipédia. malheureusement un crétin l'a supprimé.. Il s'agissait d'un exemples avec des véhicules et la catégorie des véhicules. De 0 à 3,5 T le véhicule est classé VL, au delà de 3.5 t le véhicule est classé PL. Il y a bien un domaine (une plage de valeur) pour une clef (la catégorie). C'est la forme normale Domaine clef et on la rencontre plus souvent qu'on ne le croit. Par exemple les tarifs d'affranchissement en sont un autre exemple.

    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/ * * * * *

  6. #6
    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 : 43
    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
    Par défaut
    Cela peut être une modélisation parfaitement correcte car elle répond en totalité à la forme normale domaine clef
    Nous sommes d'accord mais cela ne veux pas dire qu'elle soit optimale...

    modélisation SOUVENT désastreuse
    Vous êtes le mieux placé pour savoir que la modélisation est souvent laissée à des développeurs dont ce n'est pas le métier et qui ne sont pas très sensibles aux problématiques de montée en charge, de non redondance des données ETC.

    Heureusement on peut s'appuyer quotidiennement sur vos travaux pour les remettre dans le droit chemin

    A+

Discussions similaires

  1. SQL, Problème avec Between
    Par Heallidan dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/01/2012, 10h35
  2. Problème avec BETWEEN
    Par perchman dans le forum Langage SQL
    Réponses: 3
    Dernier message: 27/10/2010, 16h44
  3. problème avec between date
    Par jeanpierre215 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 27/09/2010, 17h58
  4. problème avec between
    Par Paula15 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/09/2010, 14h33
  5. Problème avec Between dans un code
    Par Sendo dans le forum Access
    Réponses: 4
    Dernier message: 02/10/2005, 18h44

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