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 10/02/2011, 14h31   #1
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 99
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 99
Points : 17
Points : 17
Par défaut Vérifier que le format d'un varchar respecte : aa_bb_cc

Bonjour à tous,

J'ai une variable @s de type varchar. Par une requête SQL, je souhaiterais savoir si elle contient au moins 3 parties non vides (de caractères alpha, chiffres, symboles...) séparés par 2 underscores : a_b_c

Je suis arrivé à vérifier la présence de 2 underscores et au moins 5 caractères au total :
Code :
len(@s) >= 5 AND len(@s) - len(REPLACE(@s, '_', '')) >= 2
Mais cela ne me garantit pas que les 3 parties sont non vides. La variable peut valoir ceci, à tort : abcefg__

Idem pour ce code :
Je souhaiterais ne pas avoir recours aux SQL CLR (regex), ni à une usine à gaz (gros curseur...). Et lister tous les caractères possibles et imaginables dans les parties non vides ne me parait pas exploitable.

Merci bcp d'avance
abbepierre94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 14h41   #2
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

dans un like :
% signifie 0 à n caractere(s)
_ signifie 1 et 1 seul caractère

à partir de la :
_% signifie 1 caractère ou plus, mais au moins 1
__% signifie 2 caracteres ou plus...

donc ton problème doit se résoudre de la façon suivante (pas testée):
Code sql :
1
2
 
@s LIKE '_%[_]_%[_]_%'
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 15h43   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
NON !!! pas bon...

Code :
LIKE '_%?__%?__%' ESCAPE '?'
Vous pouvez remplacer le caractère d'échappement par un caractère autre, y compris non imprimable.

Ceci est du pur SQL normatif.

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 15h47   #4
Membre habitué
 
Inscription : janvier 2008
Messages : 212
Détails du profil
Informations forums :
Inscription : janvier 2008
Messages : 212
Points : 135
Points : 135
Citation:
Envoyé par SQLpro Voir le message
NON !!! pas bon...

Code :
LIKE '_%?__%?__%' ESCAPE '?'
Vous pouvez remplacer le caractère d'échappement par un caractère autre, y compris non imprimable.

Ceci est du pur SQL normatif.

A +
Joli
Philippe Robert est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 16h23   #5
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 99
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 99
Points : 17
Points : 17
La grande classe, merci
Mais je ne comprends pas en quoi la solution de aieeeuuuuu n'est pas bonne, même après tests... merci de m'éclairer
abbepierre94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 16h56   #6
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 459
Points : 10 459
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Elle est correcte pour SQL-Server mais n'est pas normative.

C'est comme utiliser isnull au lieu de coalesce.
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 17h22   #7
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 99
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 99
Points : 17
Points : 17
Oki, merci bien !

Par contre, je m'aperçois que vos propositions n'écartent pas ce genre de cas :
a_b_c_d_e_f_g

En fait, je voudrais avoir une chaîne avec exactement 2 underscores, soit a_b_c. Je sais que je peux rajouter à votre proposition un comptage du nombre d'underscores, comme ceci :
Code :
LIKE '_%?__%?__%' ESCAPE '?' AND (len(@s) - len(REPLACE(@s, '_', '')) = 2)
Mais pour la beauté de la chose, comment lui dire qu'après les 2 underscores, je n'accepte pas d'underscore ? Je peux utiliser ce qui suit mais ça ne s'applique qu'au caractère suivant :
Merci pour la belle solution
abbepierre94 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 18h44   #8
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 950
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 950
Points : 17 769
Points : 17 769
Il me semble qu'au moment ou j'ai posté il manquait certains underscore dans la solution de aieu....

A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2011, 18h56   #9
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
Citation:
Envoyé par abbepierre94 Voir le message
En fait, je voudrais avoir une chaîne avec exactement 2 underscores, soit a_b_c. Je sais que je peux rajouter à votre proposition un comptage du nombre d'underscores, comme ceci :
Code :
LIKE '_%?__%?__%' ESCAPE '?' AND (len(@s) - len(REPLACE(@s, '_', '')) = 2)
tu peux aussi faire comme ceci, mais il y a peut être plus classe :
Code sql :
1
2
3
 
LIKE '_%?__%?__%' ESCAPE '?' 
AND NOT LIKE '%?_%?_%?_%' ESCAPE '?'

Citation:
Envoyé par SQLpro Voir le message
Il me semble qu'au moment ou j'ai posté il manquait certains underscore dans la solution de aieu....
Je n'y ais pas retouché...
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/02/2011, 12h20   #10
Futur Membre du Club
 
Inscription : octobre 2008
Messages : 99
Détails du profil
Informations forums :
Inscription : octobre 2008
Messages : 99
Points : 17
Points : 17
Pas bête
Je me demandais juste si l'on ne pouvait pas interdire un ensemble de caractères pour tous les caractères "d'après", et pas juste le caractère suivant.

En tt cas, le sujet est résolu, merci à tous !
LIKE '[Y][O][U]%'
abbepierre94 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 11h50.


 
 
 
 
Partenaires

Hébergement Web