Em 13 de agosto de 2011 11:53, Alexandre Macedo
<[email protected]> escreveu:
> Senhores,
>
> Estou voltando a trabalhar com o PostgreSQL, depois de mais de 5 anos sem
> utilizar.
> Neste momento estou "intrigado" com o comportamento do PostgreSQL,
> relacionado a um campo "orgao", que tem valores "numéricos" alinhados à
> direita.
> Vejam a estrutura da tabela abaixo:
> -bash-3.2$ psql -d pmgvprod
> psql (9.0.4)
> Type "help" for help.
> pmgvprod=# \d orgaos
>             Table "pmgvschema.orgaos"
>    Column    |         Type          | Modifiers
> -------------+-----------------------+-----------
>  orgao       | character varying(4)  | not null
>  descricao   | character varying(30) |
>  sigla       | character varying(12) |
>  tipoorgao   | character varying(2)  |
>  nivel       | character varying(1)  |
>  responsavel | character varying(35) |
>  cargo       | character varying(2)  |
> Indexes:
>     "pk_orgaos_orgao_01" PRIMARY KEY, btree (orgao)
> Como disse, o campo "orgao" tem somente valores "numéricos" alinhados à
> direita, por exemplo, o valor 650 está armazenado como " 650" (branco, seis,
> cinco, zero):
> "orgao","descricao","datacad"
> " 100","Orgao 100",20110101
> " 200","Orgao 200",20110102
> " 300","Orgao 300",20110103
> " 555","Orgao 555",20110104
> " 650","Orgao 650",20110105
> " 700","Orgao 700",20110106
> "1000","Orgao 1000",20110107
> "2000","Orgao 2000",20110108
> "3000","Orgao 3000",20110109
> "4000","Orgao 4000",20110110
> O problema aqui é quando é feito um "SELECT" buscando todas as chaves
> maiores que " 650" (branco, seis, cinco, zero):
> SELECT ORGAO FROM ORGAOS WHERE ORGAO > " 650";
> O PostgreSQL não está retornando os valores que deveria.
> Não vejo problemas em trabalhar com este campo como "numérico", mas fiquei
> intrigado o "porquê" do PostgreSQL ter este comportamento diferente dos
> outros bancos de dados testados.
> O banco está com o Encoding, Collation e Ctype conforme abaixo:
> postgres=# \q
> -bash-3.2$ psql -l
>                                        List of databases
>    Name    |  Owner   | Encoding |    Collation     |      Ctype       |
> Acces
> s privileges
> -----------+----------+----------+------------------+------------------+-----------------------
>  pmgvprod  | postgres | LATIN1   | en_US.ISO-8859-1 | en_US.ISO-8859-1 |
>  postgres  | postgres | LATIN1   | en_US.ISO-8859-1 | en_US.ISO-8859-1 |
>  template0 | postgres | LATIN1   | en_US.ISO-8859-1 | en_US.ISO-8859-1 |
> =c/postgres          +
>            |          |          |                  |                  |
> postgres=CTc/postgres
>  template1 | postgres | LATIN1   | en_US.ISO-8859-1 | en_US.ISO-8859-1 |
> =c/postgres          +
>            |          |          |                  |                  |
> postgres=CTc/postgres
> (4 rows)
> Alguém já passou por isso?
>


Se seu comando for literalmente o apresentado acima você especificou
erroneamente a string.
Uma string é delimitada por ' e não por ".
Se você colocar " 650" você está se referindo a um identificador e não
a string ' 650'.
Veja "delimited identifier" ou "quoted identifier" em:
http://www.postgresql.org/docs/current/interactive/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

Coloque aqui o resultado obtido e o que você esperava obter.

Osvaldo
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a