Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

4 réponses
Avatar
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

4 réponses

Avatar
Fred BROUARD
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 ***********************
Avatar
jerome
"Fred BROUARD" wrote in message
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
Avatar
Patrice
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" a écrit dans le message de news:
%

"Fred BROUARD" wrote in message
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




Avatar
jerome
Merci

"Patrice" <http://www.chez.com/scribe/> wrote in message
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" a écrit dans le message de news:
%
>
> "Fred BROUARD" wrote in message
> 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
>
>