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