Vous n'êtes pas identifié(e).

#1 26/05/2015 10:05:47

Geo-x
Membre

ORDER BY sur un champ mixte

Bonjour @ tous.

Une question me taraude, je souhaite faire un ORDER BY sur une colonne déclarée en varchar et qui contient à la fois des numéros et à la fois des lettres.

Ça donne quelque chose du genre :

Col1
------
A
1
10
2
3
12
AA
B

et je souhaiterais que ça puisse donner :

Col1
------
1
2
3
10
12
A
AA
B

J'imagine qu'avec un CASE on devrait pouvoir en tirer quelque chose, mais j'avoue buter un peu là.

Geo-x

Hors ligne

#2 30/05/2015 10:29:10

elol
Membre

Re : ORDER BY sur un champ mixte

Bonjour,

Tu peux utiliser une fonction pour ton ORDER BY, qui prend en argument ta valeur, et qui doit la transformer en une valeur qui permet de classer correctement.

create function ordre(str varchar)
RETURNS varchar
LANGUAGE plpgsql
AS $$
BEGIN
   RETURN CASE WHEN str < 'A' THEN lpad(str, 255, '0') ELSE str END;
END;
$$;

select ordre(content), content from tab order by ordre(content);

Hors ligne

Pied de page des forums