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

Des chiffres et des lettres

9 réponses
Avatar
Alain MENARD
Bonjour à tous,

Non ce n'est pas un jeu. Voilà, j'ai un champ Texte nommé "Code" qui peut
contenir par exemple ceci :

1
2
3
4A
4B
10
100
101
102

Comme vous l'imaginez, si je tri ce champ qui est un texte et non un
numérique, je vais retrouver :

1
10
100
101
102
2
3
4A
4B

Donc ma question est la suivante :

Est il possible via un champ calculé dans la requete de rajouter des 0
devant la valeur pour avoir toujours 4 chiffres

0001
0002
0003
0004A
0004B
0010
0100
0101
0102

Merci de toute l'aide que vous pourriez m'apporter

--

Amicalement

Alain MENARD

Pour me joindre : amenard@vision-tech.fr

9 réponses

Avatar
Alain MENARD
Bonjour David,

c'est bien dommage car le code peut être 2345Ba

En fait il y a toujours une valeur à gauche et parfois de l'alpha à droite

--

Amicalement

Alain MENARD

Pour me joindre :

"David Brabant" a écrit dans le
message de news:bg3aof$5hh$
"Alain MENARD" wrote

> Est il possible via un champ calculé dans la requete de rajouter des 0
> devant la valeur pour avoir toujours 4 chiffres

Ceci ne marche que si la lettre est toujours en dernière position dans
la colonne et s'il n'y en a qu'une seule:

select
case when patindex('%[A-Z]%', aColumn) <> 0
then right('0000' + aColumn, datalength('0000') + 1)
else right('0000' + aColumn, datalength('0000'))
end
from aTable

--
David




Avatar
David Brabant
"Alain MENARD" wrote

Est il possible via un champ calculé dans la requete de rajouter des 0
devant la valeur pour avoir toujours 4 chiffres



Ceci ne marche que si la lettre est toujours en dernière position dans
la colonne et s'il n'y en a qu'une seule:

select
case when patindex('%[A-Z]%', aColumn) <> 0
then right('0000' + aColumn, datalength('0000') + 1)
else right('0000' + aColumn, datalength('0000'))
end
from aTable

--
David
Avatar
David Brabant
"Alain MENARD" wrote

En fait il y a toujours une valeur à gauche et parfois de l'alpha à droite



Ceci fonctionne, pour autant que la valeur numérique ne dépasse pas 4
digits, auquel cas il faut bien entendu modifier les chaines '0000' et y
ajouter le nombre de zéros qui va bien :

select
case when patindex('%[A-Z]%', aColumn) <> 0
then right('0000' + left(aColumn, patindex('%[A-Z]%', aColumn) - 1) , datalength('0000'))
+ right(aColumn, patindex('%[0-9]%', reverse(aColumn)) - 1)
else right('0000' + aColumn, datalength('0000'))
end
from aTable

--
David
Avatar
David Brabant
"Alain MENARD" wrote

Je travaille en SQL sous access et vais utiliser la ligne SQL
dans un prog VB. donc je ne peux utiliser cette fonction.



Pour ce qui concerne la requête que j'ai donnée, il
faut remplacer "patindex" par "instr" qui est l'équivalent
en Access si mes souvenirs sont bons.

De toute façon, il faut voir ceci comme une leçon : la
colonne en question n'aurait probablement jamais dû
exister ... C'est peut-être le bon moment pour re-modeler
la table et migrer ses données.

--
David
Avatar
Patrice Scribe
REPLICATE(0,<Longueur Max>-LEN(Champ))+Champ pour remplir le champ avec des
0 à droite à pour avoir <longueur max> comme longueur totale. Il est
également possible de stocker séparemment la partie numérique et la partie
alphanumérique (selon que ce code est constitué de deux parties ou sera
toujours traité dans son ensemble). Dans ce cas, il suffit de formatter le
champ nuémrique à la lecture et le tri n'est plus perturbé.

Patrice

--

"Alain MENARD" a écrit dans le message de
news:3f252743$0$21143$
Bonjour à tous,

Non ce n'est pas un jeu. Voilà, j'ai un champ Texte nommé "Code" qui peut
contenir par exemple ceci :

1
2
3
4A
4B
10
100
101
102

Comme vous l'imaginez, si je tri ce champ qui est un texte et non un
numérique, je vais retrouver :

1
10
100
101
102
2
3
4A
4B

Donc ma question est la suivante :

Est il possible via un champ calculé dans la requete de rajouter des 0
devant la valeur pour avoir toujours 4 chiffres

0001
0002
0003
0004A
0004B
0010
0100
0101
0102

Merci de toute l'aide que vous pourriez m'apporter

--

Amicalement

Alain MENARD

Pour me joindre :




Avatar
Patrice Scribe
Ok. Je vois effectivement dans le fil des solutions répondant au problème
exact. Au temps pour moi.... (séparer les deux champs me semble d'autant
plus souhaitable).

--

"David Brabant" a écrit dans le
message de news:bg3dsq$hne$
"Patrice Scribe" wrote

> REPLICATE(0,<Longueur Max>-LEN(Champ))+Champ pour
> remplir le champ avec des 0 à droite à pour avoir <longueur max>
> comme longueur totale.

Cela ne répond pas exactement à son problème dans la mesure
où, si j'ai bien compris, il souhaitait formater la partie numérique
sur un nombre donné de digit et y concaténer la partie alpha s'il
y en a une. Dans ta solution, le tout (num + alpha) est formaté sur
une longueur donnée.

--
David




Avatar
Alain MENARD
Bonjou David,

En fait ce code correspond au numéro de catalogue donné à un timbre par les
éditeurs.

Disons qu'ils auraient pu faire simple en faisant 1, 2 , 3, 4 mais ils
distingue 2 types d'un même timbre par des lettres (29A, 29B).

Je vais voir avec instr.

Merci tout de même de cette aide.

--

Amicalement

Alain MENARD

Pour me joindre :

"David Brabant" a écrit dans le
message de news:bg3cqi$dfo$
"Alain MENARD" wrote

> Je travaille en SQL sous access et vais utiliser la ligne SQL
> dans un prog VB. donc je ne peux utiliser cette fonction.

Pour ce qui concerne la requête que j'ai donnée, il
faut remplacer "patindex" par "instr" qui est l'équivalent
en Access si mes souvenirs sont bons.

De toute façon, il faut voir ceci comme une leçon : la
colonne en question n'aurait probablement jamais dû
exister ... C'est peut-être le bon moment pour re-modeler
la table et migrer ses données.

--
David




Avatar
Alain MENARD
Oui c'est exactement cela. Mais je ne désespère pas. J'ai l'impression de ne
pas être loin de la solution.

Si je ne trouve pas, je trierai les données sur la partie numérique du code,
ce qui est déja mieux que ce qui ai fait actuellement.

Nous autres philatélistes travaillons beaucoup avec le numéro du timbre.

--

Amicalement

Alain MENARD
Auteur des CD-Roms Philatélix
http://www.philatelix.fr

Pour me joindre :

"David Brabant" a écrit dans le
message de news:bg3dsq$hne$
"Patrice Scribe" wrote

> REPLICATE(0,<Longueur Max>-LEN(Champ))+Champ pour
> remplir le champ avec des 0 à droite à pour avoir <longueur max>
> comme longueur totale.

Cela ne répond pas exactement à son problème dans la mesure
où, si j'ai bien compris, il souhaitait formater la partie numérique
sur un nombre donné de digit et y concaténer la partie alpha s'il
y en a une. Dans ta solution, le tout (num + alpha) est formaté sur
une longueur donnée.

--
David




Avatar
lionelp
Bonjour,

à condition qu'il n'y ait pas d'autre règle ça doit pouvoir marcher:

select left(replicate('0',4-datalength(a))+a, 4*isnumeric(a))
+ left(replicate('0',5-datalength(a))+a, 5*(1-isnumeric(a)))
from ma_table

Cordialement,
LionelP

"Alain MENARD" wrote in message
news:3f253e8a$0$21118$
Oui c'est exactement cela. Mais je ne désespère pas. J'ai l'impression de


ne
pas être loin de la solution.

Si je ne trouve pas, je trierai les données sur la partie numérique du


code,
ce qui est déja mieux que ce qui ai fait actuellement.

Nous autres philatélistes travaillons beaucoup avec le numéro du timbre.

--

Amicalement

Alain MENARD
Auteur des CD-Roms Philatélix
http://www.philatelix.fr

Pour me joindre :

"David Brabant" a écrit dans le
message de news:bg3dsq$hne$
> "Patrice Scribe" wrote
>
> > REPLICATE(0,<Longueur Max>-LEN(Champ))+Champ pour
> > remplir le champ avec des 0 à droite à pour avoir <longueur max>
> > comme longueur totale.
>
> Cela ne répond pas exactement à son problème dans la mesure
> où, si j'ai bien compris, il souhaitait formater la partie numérique
> sur un nombre donné de digit et y concaténer la partie alpha s'il
> y en a une. Dans ta solution, le tout (num + alpha) est formaté sur
> une longueur donnée.
>
> --
> David
>
>