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 :

Condition sur le type de données


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre chevronné Avatar de tumoo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 309
    Par défaut Condition sur le type de données
    Bonjour à tous

    Je travaille sous SQL Server 2005
    J'ai une table ActionClient qui contient une colonne Code de type nchar(10)
    Les données de cette colonne sont tirées d'une autre table qui est générée par un ERP. Chaque ligne de cette colonne comprend au moins 3 caractères et 2 chiffres, au maximum 8 caractères et 2 chiffres.
    Mais cette colonne peut aussi contenir des lignes de type number (la valeur d'un id auto incrémenté d'un contact n'appartenant pas encore à l'ERP). Une fois que le contact est enregistré dans l'ERP alors il a un code (caractères+2chiffres) que je mets à jour dans la colonne code.

    Je voulais savoir s'il était possible de faire un select sur cette colonne avec dans mon where une condition sur le type (pour obtenir que les actions des contacts non enregistrés en fait) et comment m'y prendre.

    Merci

  2. #2
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Outre la modélisation qui n'est pas conforme à la première forme normale, vous pouvez vous en sortir avec la fonction ISNUMERIC :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    declare @test table (col   nchar(10))
     
    insert into @test (col) values ('ABC')
    insert into @test (col) values ('DEF')
    insert into @test (col) values ('12')
    insert into @test (col) values ('A15')
     
    select col
      from @test
     where isnumeric(col) = 1
     
    col
    ----------
    12

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

    Vous voulez filtrer pour n'avoir que les lignes qui contiennent un nombre ?


    plusieurs pistes :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT MesColonnes
    FROM MaTable
    WHERE LaColonne BETWEEN '0' AND '9999999999'

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT MesColonnes
    FROM MaTable
    WHERE LaColonne LIKE '[0-9]%'
    (avec celle-ci vous pouvez adapter pour identifer chaque type...)
    EDIT : d’ailleurs elle ne renvoi pas juste les lignes dont la colonne est un nombre, mais dont le premier caractère est un chiffre ! cependant elle vous permettrait de récupérer les lignes dont la colonne contient 2 lettres majuscules suivies de 3 chiffres en mettant comme motif : '[A-Z][A-Z][0-9][0-9][0-9]' mais cela reste à adapter à vos données et à votre collation.

    ou encore :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT MesColonnes
    FROM MaTable
    WHERE ISNUMERIC(LaColonneEnQuestion) = 1

  4. #4
    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 : 44
    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,

    Essayez :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT	desColonnes
    FROM	ActionClient
    WHERE	IS_NUMERIC(Code) = 1
    Attention néanmoins à l'utilisation de cette fonction, comme je l'ai décrit ici

    Si vous avez un besoin récurrent de rechercher de tels codes, alors faites une colonne calculée persistante

    En dehors de cela, l'utilité de l'utilisation du type nchar ne s'explique que si on stocke des caractères non latins dans cette colonne, ce dont je doute dans votre cas.
    En effet les types n[var]char utilisent Unicode, et donc deux octets par caractère.
    En passant en [var]char, on utilise ASCII, qui ne requiert qu'un seul octet par caractère ... mais ne permet de stocker que les caractères de l'alphabet latin

    @++

  5. #5
    Membre chevronné Avatar de tumoo
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2011
    Messages : 309
    Par défaut
    Merci à vous 3, quelle réactivité

    Bien joué à Waldar qui devance aieeeuuuuu et elsuket d'une minute

    J'étais pas loin des solutions de aieeeuuuuu, mais c'était pas tout à fait ça

    bon en fait je ne vais pas avoir besoin de ça car j'avais une colonne typeContact (0 pour les contacts non enregistrés, 1 pour les enregistrés) qui m'était sortie de la tête , il me suffi juste de filtrer dessus

    mais merci quand même

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

Discussions similaires

  1. Condition sur le type de données
    Par nawal59 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 10/11/2011, 14h15
  2. Condition sur le type d'une valeur retournée
    Par Andalor dans le forum Développement
    Réponses: 2
    Dernier message: 09/03/2009, 12h55
  3. Replace sur un type de donnée text
    Par zut94 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 21/11/2008, 21h32
  4. Requête sur un type de donnée
    Par Coocky10 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 13/11/2007, 16h32
  5. [SQL 2000] Question sur les types de données
    Par Angath dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 03/11/2006, 14h05

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