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

Problème de tri numérique-alpha

2 réponses
Avatar
news.free.fr
Bonjour,

SQL classe les chaînes par leur longueur puis sur la valeur de chaque
caractère.

Je souhaite trier selon l'ordre numérique puis alpha à la façon d'un
dictionnaire, exemple :
1
2
9
10
11
99
100
123
9999
A
A1
A11
A2
B
B1
BA

mais ne sais comment faire.
Auriez-vous une astuce ou mieux une solution.

Merci d'avance

2 réponses

Avatar
Fred BROUARD
difficile te te répondre sans une desciption des tables et la requête qui
produit ce résultat !!!

Poste comme ceci :

1) Donnez les ordres SQL de création de vos tables (CREATE TABLE) ainsi que les
INSERT d'un jeu de données basique afin que tout un chacun puisse reproduire ce
que vous voulez faire sur son SGBDR afin de mieux vous aider.
Exemple :
Code:

CREATE TABLE MaTable
(Col1 VARCHAR(128),
Col2 INTEGER,
Col3 DATE,
Col4 CHAR(32),
CONSTRAINT PK_MaTable PRIMARY KEY (COL1, COL2))

INSERT INTO MaTable (COL1, COL2, COL3)
VALUES ('Un mot', 32, CURRENT_TIMESTAMP)
INSERT INTO MaTable (COL1, COL2, COL3)
VALUES ('Deux maux', 0, NULL)


2) présentez le résultat que vous voulez voir apparaître sous la forme d'une table
Exemple :
Code:

-- Le résultat attendu :
NOM VILLE NOMBRE
------ ---------- ------
MARTIN PARIS 2
DUPOND STRASBOURG 3
...

A +

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html" target="_blank" class="text-blue hover:opacity-90 " style="word-break: break-all;" rel="noopener nofollow">http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************


news.free.fr a écrit:
Bonjour,

SQL classe les chaînes par leur longueur puis sur la valeur de chaque
caractère.

Je souhaite trier selon l'ordre numérique puis alpha à la façon d'un
dictionnaire, exemple :
1
2
9
10
11
99
100
123
9999
A
A1
A11
A2
B
B1
BA

mais ne sais comment faire.
Auriez-vous une astuce ou mieux une solution.

Merci d'avance




Avatar
Philippe T [MS]
Bonjour,

Si j'ai bien compris le problème, de mon coté je format la chaine avec une
longueur fixe préfixé par des '0' ou des '9' en fonction de numérique ou pas

SET NOCOUNT ON

DECLARE @MyTable TABLE(MA_VAL nvarchar(10))

INSERT INTO @MyTable(MA_VAL) VALUES('1')
INSERT INTO @MyTable(MA_VAL) VALUES('2')
INSERT INTO @MyTable(MA_VAL) VALUES('9')
INSERT INTO @MyTable(MA_VAL) VALUES('10')
INSERT INTO @MyTable(MA_VAL) VALUES('11')
INSERT INTO @MyTable(MA_VAL) VALUES('100')
INSERT INTO @MyTable(MA_VAL) VALUES('A')
INSERT INTO @MyTable(MA_VAL) VALUES('A1')
INSERT INTO @MyTable(MA_VAL) VALUES('A11')

SELECT *
FROM @MyTable
ORDER BY CASE ISNUMERIC(MA_VAL)
WHEN 1 THEN REPLICATE('0', 10 - LEN(CONVERT(nvarchar, MA_VAL))) +
CONVERT(nvarchar, MA_VAL)
ELSE REPLICATE('9', 10 - LEN(CONVERT(nvarchar, MA_VAL))) +
CONVERT(nvarchar, MA_VAL)
END


----------------------------------------------------------------------
Philippe TROTIN - Microsoft Service France

"news.free.fr" wrote in message
news:43171acb$0$31019$
Bonjour,

SQL classe les chaînes par leur longueur puis sur la valeur de chaque
caractère.

Je souhaite trier selon l'ordre numérique puis alpha à la façon d'un
dictionnaire, exemple :
1
2
9
10
11
99
100
123
9999
A
A1
A11
A2
B
B1
BA

mais ne sais comment faire.
Auriez-vous une astuce ou mieux une solution.

Merci d'avance