Pedro B. Alves escreveu:
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 alguém sabe oq eu tenho que fazer?



Verifique se a utilização da função to_number() lhe atende.

bdteste=# SELECT * FROM bar ORDER BY campo;
 cod | campo
-----+-------
   1 | 1
   2 | 10
   3 | 11
  12 | 1B1C5
   4 | 2
   5 | 20
   6 | 21
   7 | 22
   8 | 3
   9 | 30
  10 | 31
  13 | AB25
  11 | ML201
(13 registros)

bdteste=# SELECT * FROM bar ORDER BY to_number(campo,'99999');
 cod | campo
-----+-------
   1 | 1
   4 | 2
   8 | 3
   2 | 10
   3 | 11
   5 | 20
   6 | 21
   7 | 22
  13 | AB25
   9 | 30
  10 | 31
  12 | 1B1C5
  11 | ML201
(13 registros)

Repare que a função to_number() desconsidera os caracteres não-numéricos, não sei se é exatamente isso que você deseja.

bdteste=# SELECT *,to_number(campo,'99999') FROM bar ORDER BY to_number(campo,'99999');
 cod | campo | to_number
-----+-------+-----------
   1 | 1     |         1
   4 | 2     |         2
   8 | 3     |         3
   2 | 10    |        10
   3 | 11    |        11
   5 | 20    |        20
   6 | 21    |        21
   7 | 22    |        22
  13 | AB25  |        25
   9 | 30    |        30
  10 | 31    |        31
  12 | 1B1C5 |       115
  11 | ML201 |       201
(13 registros)

_______________________________________________
pgbr-geral mailing list
pgbr-geral@listas.postgresql.org.br
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a