Edson Mundin Ferreira escreveu:
Pedro veja se é isso que vc. quer:
SELECT *
FROM BAR
ORDER BY CASE WHEN campo >= 'A' THEN Campo ELSE to_char(to_number(campo,
'9999'),'0000') END
Édson Mundin Ferreira
Pedro B. Alves wrote:
Salve pessoal.
estou tendo um pouco de dificuldades na seguinte ocorrencia:
tenho um campo de uma tabela como varchar(20);
só que nesse campo é armazenado numeros "alguns contem letras, ex:
ML201" só que muitos são apenas numeros. ex: 10,20,30.. etc.
então gostaria que meu select retornasse ordenado esses numeros..
por exemplo, se eu usar o order by noramlmente ele me traria na
seguinte ordem:
campo
---------|
1
10
11
12
13
2
21
22
23
3
30
31
32
A..
B..
C..
D..
e assim por diante..
gostaria que ele me retornasse da seguinte forma:
campo|
----------|
1
2
3
10
11
12
13
21
22
23
30
31
32
A..
B..
C..
e assim por diante
Esta alternativa não funciona caso o campo contenha letras mas o
primeiro caracter seja um algarismo, ex. '1B1C5'.
Talvez esta sentença atenda (se apenas os campos contendo exclusivamente
algarismos devam ser considerados como numéricos para efeito de ordenação):
SELECT * FROM bar
ORDER BY CASE campo ~ '[^[:digit:]+]'
WHEN true THEN campo
ELSE lpad(campo, 20, '0') END;
[]s
Osvaldo
_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral