Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Développement
Développement Forum d'entraide sur le Transact-SQL, le CLR, les procédures stockées, les triggers, les requêtes SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/06/2011, 14h57   #1
Membre expérimenté
 
Avatar de tumoo
 
Homme
Développeur informatique
Inscription : janvier 2011
Messages : 309
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France, Charente Maritime (Poitou Charente)

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

Informations forums :
Inscription : janvier 2011
Messages : 309
Points : 550
Points : 550
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
tumoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/06/2011, 15h11   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 433
Points : 10 433
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Outre la modélisation qui n'est pas conforme à la première forme normale, vous pouvez vous en sortir avec la fonction ISNUMERIC :
Code :
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
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/06/2011, 15h12   #3
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour,

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


plusieurs pistes :

Code SQL :
1
2
3
4
 
SELECT MesColonnes
FROM MaTable
WHERE LaColonne BETWEEN '0' AND '9999999999'

Code SQL :
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 :
1
2
3
4
 
SELECT MesColonnes
FROM MaTable
WHERE ISNUMERIC(LaColonneEnQuestion) = 1
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/06/2011, 15h12   #4
Modérateur

 
Avatar de elsuket
 
Homme Nicolas Souquet
Administrateur de base de données
Inscription : janvier 2005
Messages : 4 669
Détails du profil
Informations personnelles :
Nom : Homme Nicolas Souquet
Âge : 30
Localisation : Thaïlande

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : janvier 2005
Messages : 4 669
Points : 8 729
Points : 8 729
Bonjour,

Essayez :

Code :
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

@++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes.
Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012
elsuket est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/06/2011, 15h19   #5
Membre expérimenté
 
Avatar de tumoo
 
Homme
Développeur informatique
Inscription : janvier 2011
Messages : 309
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 22
Localisation : France, Charente Maritime (Poitou Charente)

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

Informations forums :
Inscription : janvier 2011
Messages : 309
Points : 550
Points : 550
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
tumoo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h14.


 
 
 
 
Partenaires

Hébergement Web