Extraire la partie numérique d'une colonne alpha pour un tri.

Le
jerome
Bonjour,

J'ai une colonne alpha numérique qui contient soit des numériques soit une
combinaison de données alpha et numériques.
Exemples :
1
111
22
FT323
WX154


Comment puis-je trier ces données pour obtenir
1
22
111
WX154
FT323

Merci
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Fred BROUARD
Le #11856291
jerome a écrit :
Bonjour,

J'ai une colonne alpha numérique qui contient soit des numériques soit une
combinaison de données alpha et numériques.
Exemples :
1
111
22
FT323
WX154
...

Comment puis-je trier ces données pour obtenir
1
22
111
WX154
FT323

Merci




Il n'y a pas de solution simple à votre problème car votre base viole la
première forme normale !
http://sqlpro.developpez.com/cours/standards/#L2.2
restructurez votre base correctement et votre requête deviendra évidente.
Une base de données, c'est pas un fichier COBOL !!!

--
Frédéric BROUARD, MVP SQL Server, expert bases de données et langage SQL
Le site sur le langage SQL et les SGBDR : http://sqlpro.developpez.com
Audit, conseil, expertise, formation, modélisation, tuning, optimisation
********************* http://www.datasapiens.com ***********************
jerome
Le #11856261
"Fred BROUARD" news:
jerome a écrit :
> Bonjour,
>
> J'ai une colonne alpha numérique qui contient soit des numériques soit


une
> combinaison de données alpha et numériques.
> Exemples :
> 1
> 111
> 22
> FT323
> WX154
> ...
>
> Comment puis-je trier ces données pour obtenir
> 1
> 22
> 111
> WX154
> FT323
>
> Merci
>
>
Il n'y a pas de solution simple à votre problème car votre base viole la
première forme normale !
http://sqlpro.developpez.com/cours/standards/#L2.2
restructurez votre base correctement et votre requête deviendra évidente.
Une base de données, c'est pas un fichier COBOL !!!



Ben oui je sais bien mais c'est une base que je récupère et, pour l'instant,
je ne me vois pas tout restructurer.
Une idée quand même pour extraire les données numériques de la colonne alpha
?

Merci
Patrice
Le #11856251
Quelque chose comme (non testé) :

CREATE FUNCTION MaFonction(@MaChaine VARCHAR(10)) RETURNS INT AS BEGIN
DECLARE @Position TINYINT
-- Partir de la fin
SET @Position=LEN(@Chaine)
-- Trouver le dernier nom numérique
WHILE SUBSTRING(@Chaine,@Position,1) BETWEEN '0' AND '9'
SET @Position=@Position-1
-- Retourner le résultat
RETURN RIGHT(@Chaine,LEN(@Chaine))

P.S : ajouter aussi une condition d'arrêt ou un test pour convertir
directement la chaine si elle est entièrement numérique (style IF
ISNUMERIC(@MaChaine RETURN CAST(@MaChaine AS INT))...

Il serait effectivement souhaitable à terme de séparer les deux informations
qui sont stockées dans cette colonne pour pouvoir les traiter de façon
indépendante et bien plus efficacement (par exemple avec un index etc...)...

---
Patrice

"jerome" %

"Fred BROUARD" news:
jerome a écrit :
> Bonjour,
>
> J'ai une colonne alpha numérique qui contient soit des numériques soit


une
> combinaison de données alpha et numériques.
> Exemples :
> 1
> 111
> 22
> FT323
> WX154
> ...
>
> Comment puis-je trier ces données pour obtenir
> 1
> 22
> 111
> WX154
> FT323
>
> Merci
>
>
Il n'y a pas de solution simple à votre problème car votre base viole la
première forme normale !
http://sqlpro.developpez.com/cours/standards/#L2.2
restructurez votre base correctement et votre requête deviendra évidente.
Une base de données, c'est pas un fichier COBOL !!!



Ben oui je sais bien mais c'est une base que je récupère et, pour
l'instant,
je ne me vois pas tout restructurer.
Une idée quand même pour extraire les données numériques de la colonne
alpha
?

Merci




jerome
Le #11856241
Merci

"Patrice" news:
Quelque chose comme (non testé) :

CREATE FUNCTION MaFonction(@MaChaine VARCHAR(10)) RETURNS INT AS BEGIN
DECLARE @Position TINYINT
-- Partir de la fin
SET @Position=LEN(@Chaine)
-- Trouver le dernier nom numérique
WHILE SUBSTRING(@Chaine,@Position,1) BETWEEN '0' AND '9'
SET @Position=@Position-1
-- Retourner le résultat
RETURN RIGHT(@Chaine,LEN(@Chaine))

P.S : ajouter aussi une condition d'arrêt ou un test pour convertir
directement la chaine si elle est entièrement numérique (style IF
ISNUMERIC(@MaChaine RETURN CAST(@MaChaine AS INT))...

Il serait effectivement souhaitable à terme de séparer les deux


informations
qui sont stockées dans cette colonne pour pouvoir les traiter de façon
indépendante et bien plus efficacement (par exemple avec un index


etc...)...

---
Patrice

"jerome" %
>
> "Fred BROUARD" > news:
>> jerome a écrit :
>> > Bonjour,
>> >
>> > J'ai une colonne alpha numérique qui contient soit des numériques


soit
> une
>> > combinaison de données alpha et numériques.
>> > Exemples :
>> > 1
>> > 111
>> > 22
>> > FT323
>> > WX154
>> > ...
>> >
>> > Comment puis-je trier ces données pour obtenir
>> > 1
>> > 22
>> > 111
>> > WX154
>> > FT323
>> >
>> > Merci
>> >
>> >
>> Il n'y a pas de solution simple à votre problème car votre base viole


la
>> première forme normale !
>> http://sqlpro.developpez.com/cours/standards/#L2.2
>> restructurez votre base correctement et votre requête deviendra


évidente.
>> Une base de données, c'est pas un fichier COBOL !!!
>
> Ben oui je sais bien mais c'est une base que je récupère et, pour
> l'instant,
> je ne me vois pas tout restructurer.
> Une idée quand même pour extraire les données numériques de la colonne
> alpha
> ?
>
> Merci
>
>




Publicité
Poster une réponse
Anonyme