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

Responder a