Fórum Query não ordena corretamente por nome #331694

21/10/2006

0

Pessoal tenho uma query que ordena pelo nome, até aqui nada de anormal. O problema é que e tem [u:6b76a2d07c][b:6b76a2d07c]um nome todo em maiúsculo[/b:6b76a2d07c][/u:6b76a2d07c] ele não aparece abaixo do que está em minusculo. Acho que é um erro na query, mas como posso corrigi-lo


Vagner.oliveira

Vagner.oliveira

Responder

Posts

21/10/2006

Motta

Para ordenar em geral os BD´s são case sensitives, vc deve usar uma função de conversão.

ex : P/ Oracle

SELECT NOME,CODIGO
FROM CLIENTES
ORDER BY UPPER(NOME),CODIGO


esta function UPPER converte tudo para maiusculo (aqui somente na ordenação), não sei se funciona em qq bd, creio que não


Responder

Gostei + 0

23/10/2006

Vagner.oliveira

Não funciona o comando, mas se colocar dessa forma ae só aparece os que estão em maiúsculo.


Select *
From Pecas
where upper (Descricao) = Descricao
Order By Descricao;



Responder

Gostei + 0

23/10/2006

Motta

Select codigo,upper (Descricao) Descricao
From Pecas
Order By upper (Descricao)


tente assim


Responder

Gostei + 0

27/10/2006

Vagner.oliveira

Select codigo,upper (Descricao) Descricao From Pecas Order By upper (Descricao) tente assim


Tentei o que me passou só que da erro.

Fiz assim
Select upper (NomeClientes), NomeClientes, OrdemNumero, Fone, Celular, Indice
From OsStatus
Order By NomeClientes



E ele está ordenando primeiro os maiúsculos, depois ele ordena os minúsculos.


Responder

Gostei + 0

27/10/2006

Motta

tenta :

Select upper (NomeClientes), NomeClientes, OrdemNumero, Fone, Celular, Indice
From OsStatus
Order By 1


Responder

Gostei + 0

27/10/2006

Rinez

Qual banco de dados?
Se for Firebird pode ser o DEFAULT CHARACTER SET da criação do Banco, ou ainda o Dialect 1, 2, ou 3. Problema de letras com acento ou cedilha.


Responder

Gostei + 0

27/10/2006

Denis

Oi Colega,

Olha... é uma gambiarra... mas pode fazer assim. Crie uma view com a conversão para maiusculo.

Create view vwClientes (
NOMEMAIUSCULO,
NOME,
CODIGO) as
SELECT Upper(NOME),NOME,CODIGO
FROM CLIENTES

Depois faça um select na View ordernando pelo campo NOMEMAIUSCULO.

select * from vwcliente order by NOMEMAISCULO.

Assim a ordem vai ficar certinha. Note que vc pode exibir o outro campo nome para aparecer como foi digitado.
Mas aconselho que já converta para maiusculo quando for gravar os dados. Claro que tudo depende de sua aplicação.


Responder

Gostei + 0

27/10/2006

Denis

Oi Colega,

Olha... é uma gambiarra... mas pode fazer assim. Crie uma view com a conversão para maiusculo.

Create view vwClientes (
NOMEMAIUSCULO,
NOME,
CODIGO) as
SELECT Upper(NOME),NOME,CODIGO
FROM CLIENTES

Depois faça um select na View ordernando pelo campo NOMEMAIUSCULO.

select * from vwcliente order by NOMEMAISCULO.

Assim a ordem vai ficar certinha. Note que vc pode exibir o outro campo nome para aparecer como foi digitado.
Mas aconselho que já converta para maiusculo quando for gravar os dados. Claro que tudo depende de sua aplicação.


Responder

Gostei + 0

28/10/2006

Martins

Fiz um teste usando uma base Firebird e funcional normalmente, tenho nomes em maiúculo e minúsculo e ele me ordenou corretamente.

SELECT cod_id, upper(Nome)NOMES, Apelido from clientes Order by Upper(Nome)


SELECT cod_id, upper(Nome)NOMES, Apelido from clientes Order by Nome


Boa sorte!


Responder

Gostei + 0

28/10/2006

Marco Salles

Qual banco de dados? Se for Firebird pode ser o DEFAULT CHARACTER SET da criação do Banco, ou ainda o Dialect 1, 2, ou 3. Problema de letras com acento ou cedilha.


Acho pertinente a colocação .. Na realidade não se trata de um erro na query , conforme fora colocado pelo Wagner , mas sim caracteristicas especificas do proprio banco.. Dentre as colocaçoes a possibilidade de alterar na criaçao do banco conforme sugerido pelo Zenir ou utilizar a função Upper , conforme fora colocado pelo martins e também pelo motta.. As duas me parecem iguias

[b:50a9ca2a21]citação de motta[/b:50a9ca2a21]
Select codigo,upper (Descricao) Descricao From Pecas Order By upper (Descricao)



[b:50a9ca2a21]citação de martins[/b:50a9ca2a21]
SELECT cod_id, upper(Nome)NOMES, Apelido from clientes Order by Upper(Nome)


Não vejo erro em nenhuma das duas.. Mas voce disse que :
[b:50a9ca2a21]Citação de Wagbner se referindo ao motta[/b:50a9ca2a21]
Tentei o que me passou só que da erro.

erro aonde ?? Qual o erro ??? Na compilação ?? Qual o banco que voce esta usando ??


Responder

Gostei + 0

28/10/2006

Rinez

Eu normalmente faço com que os campos de pesquisa sejam gravados em maiúscula e os caracteres acentuados sejam convertidos em maiúsculas na hora da gravação. ç para Ç, ã para Ã, á para Á e assim por diante. Tive problemas quando fazia programas em clipper e DBaseIII em MSDOS isso a 30 anos. Após esse procedimento não tive mais problemas.
Mais qualquer coisa estamos aí para trocarmos idéia.
Abraços Zenir CTBA.


Responder

Gostei + 0

29/10/2006

Martins

Fazendo um teste rápido com Interbase e Firebird no Delphi usando Ibx não tive problemas.

  IbCli.Close;
  IbCli.SQL.Text:=´SELECT COD_ID, UPPER( NOME) NOME, APELIDO FROM CLIENTES ORDER BY NOME´;
  IbCli.Open;


Os banco no Ib/FB estão com Dialect 3 e Character Set = win1252 (lc_ctype=WIN1252).

Qualquer coisa estamos aqui para tentar ajudar.

Boa sorte!


Responder

Gostei + 0

31/10/2006

Vagner.oliveira

Meus amigos, uso o PARADOX, e Marco, meu nome é [size=24:309888a7cf][b:309888a7cf]V[/b:309888a7cf][/size:309888a7cf]agner. não está escrito errado no forum não :lol: :D .

Sobre o erro fiz algumas alterações e não ocorreu mais, só que ele ordena os maiusculos primeiro, depois os minusculos:

EX:
CD-RW
CD-R
Cabo de rede

o código que uso é esse:
Select indice, marca, quantidade, custo, venda, upper (Descricao), Descricao 
From Pecas 
Order By Descricao



Responder

Gostei + 0

31/10/2006

Martins

Vagner, vamos tentar o código abaixo Ok! :)

Seu código postado foi:

Select indice, marca, quantidade, custo, venda, upper (Descricao), Descricao 
From Pecas 
Order By Descricao 


Mudei para este:
Select indice, marca, quantidade, custo, venda, upper (Descricao) Descricao 
From Pecas 
Order By Descricao 


vc estava especificando Descricao 2 vezes, então eu removi a virgula dando um Upper no campo Descricao e passando o mesmo nome como pseudonimo. Teste.

begin
  Query1.Close;
  Query1.SQL.Clear;
  Query1.SQL.Add( ´Select indice, marca, quantidade, custo, venda, upper (Descricao) Descricao´+
                 ´ From TabTeste Order By Descricao´ );
  Query1.Open;
end;


Boa sorte!! :wink:


Responder

Gostei + 0

09/11/2006

Vagner.oliveira

funcionou perfeitamente. obrigado :lol:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar