select por codigo varchar retornando errado
Olá amigos! Estou com o seguinte problema: tenho uma tabela, e estu fazendo uma consulta sql pelo codigo (codigoduptotal char (7) not null primary key) ,
where codigoduptotal >= x and codigoduptotal <= y ordey by codigoduptotal
faço a consulta normalmente, por exemplo, se coloco para selecionar entre os registros de 1 a 50, ele seleciona e ordena de maneira estranha, por ex,
18
19
2
20
21
22
23
29
3
30
estranho, em vez de ele ir para o 20 depois do 19 ele vai para o 2??
e se eu faço a consulta entre 1 e 100, ele retorna
1
10
Como eu resolvo isso pessoal?
Agradeço a ajuda!
Um forte abraço!
where codigoduptotal >= x and codigoduptotal <= y ordey by codigoduptotal
faço a consulta normalmente, por exemplo, se coloco para selecionar entre os registros de 1 a 50, ele seleciona e ordena de maneira estranha, por ex,
18
19
2
20
21
22
23
29
3
30
estranho, em vez de ele ir para o 20 depois do 19 ele vai para o 2??
e se eu faço a consulta entre 1 e 100, ele retorna
1
10
Como eu resolvo isso pessoal?
Agradeço a ajuda!
Um forte abraço!
Jorgerock
Curtidas 0
Respostas
Sremulador
17/05/2006
tem que ser integer ou ter um 0 no incio tipo 01, 10, 02, 20..., para a sequencia dar certo
GOSTEI 0
Jorgerock
17/05/2006
Olá!
Alterei o tipo de campo para integer mas mesmo assim não funcionou. Como eu faço para deixar varchar mas completar com zeros a esquerda?
Obrigado pela atenção!
Alterei o tipo de campo para integer mas mesmo assim não funcionou. Como eu faço para deixar varchar mas completar com zeros a esquerda?
Obrigado pela atenção!
GOSTEI 0
Amarildo
17/05/2006
Jorge, vamos ver se posso te ajudar, da uma olha nesta dica
unit Zero;
interface
function RetZero(ZEROS:string;QUANT:integer):String;
implementation
function RetZero(ZEROS:string;QUANT:integer):String;
var
I,Tamanho:integer;
aux: string;
begin
aux:=zeros;
Tamanho:=length(ZEROS);
ZEROS:=´´;
for I:=1 to quant-tamanho do
ZEROS:=ZEROS+´0´;
aux:=zeros+aux;
RetZero:=aux;
end;
end.
caso nao consiga entender posso estar fazendo uma outra, ok
unit Zero;
interface
function RetZero(ZEROS:string;QUANT:integer):String;
implementation
function RetZero(ZEROS:string;QUANT:integer):String;
var
I,Tamanho:integer;
aux: string;
begin
aux:=zeros;
Tamanho:=length(ZEROS);
ZEROS:=´´;
for I:=1 to quant-tamanho do
ZEROS:=ZEROS+´0´;
aux:=zeros+aux;
RetZero:=aux;
end;
end.
caso nao consiga entender posso estar fazendo uma outra, ok
GOSTEI 0
Jorgerock
17/05/2006
Olá amigo!
Primeiro obrigado pela ajuda, mas tenho que tentar fazer isso a nivel de banco de dados. Uso um trigger para gerar o codigo no banco de dados, uso firebird 1.5.
Se alguem já passou por algo parecido, de um toque!
Muito obrigado pela atenção de todos!
Primeiro obrigado pela ajuda, mas tenho que tentar fazer isso a nivel de banco de dados. Uso um trigger para gerar o codigo no banco de dados, uso firebird 1.5.
Se alguem já passou por algo parecido, de um toque!
Muito obrigado pela atenção de todos!
GOSTEI 0
Thomaz_prg
17/05/2006
Amigo, uma forma simples de se resolver isso seria você ´trocar´ o tipo do campo ao fazer o select ou order by:
select * from tabela where cast(codigoduptotal as integer) >= X
order by cast(codigoduptotal as integer)
onde X é do tipo Inteiro. Isso resolverá seu problema.
select * from tabela where cast(codigoduptotal as integer) >= X
order by cast(codigoduptotal as integer)
onde X é do tipo Inteiro. Isso resolverá seu problema.
GOSTEI 0
Jorgerock
17/05/2006
Olá amigo! Funcionou perfeito!
Muito obrigado pela ajuda de todos!
Um forte abraço!
Muito obrigado pela ajuda de todos!
Um forte abraço!
GOSTEI 0