Ordenar por campo calculado transformado

Delphi

30/11/2006

Oi Uso Delphi 7

Estou precisando fazer um reltório onde sendo ordenado por um campo calculado. Até aí tudo bem, sei que é só colocar ele na query, e isso eu já fiz só que o problema é que o campo recebe uma sequencia numerica do tipo

11010100035
11010200040


como eu junto pedaços de outros campos pra formar esse numero eu precisaria de uma forma em que eles ficassem como se fosse um campo string, o campo que criei calculado é string, mas não sei mcomo colocar os dados nele dentro da query e que os coloque na sequencia.

Na minha query fiz
(campo1 + campo2 + campo3 + campo4) resultado

os campos são numericos e o resultado é string, como eu faria para que os campos colocassem os valores em sequencia e nao a soma deles dentro do resultado.

Agradeço antecipadamente qualquer ajuda.


Salupe

Salupe

Curtidas 0

Respostas

Arc

Arc

30/11/2006

qual banco de dados vc está usando ????

no sql server poderia fazer o seguinte

select
convert(varchar,campo1)+
convert(varchar,campo2)+
convert(varchar,campo3)+
convert(varchar,campo4) as resultado
from tabela
order by 1


GOSTEI 0
Salupe

Salupe

30/11/2006

Desculpe esqueci de dizer que utilizo o Firebird 1,5

Tentei como vc falou mas não funcionou, primeiro ele não aceitou o varchar troquei por string e passou, só que depois não aceitou o convert, só estranhei que deveria ter não aceitado a palavra convert antes do varchar.

Tem alguma outra função para trocar o convert.

Agradeço antecipadamente qualquer ajuda.


GOSTEI 0
Arc

Arc

30/11/2006

oi salupe. bom eu nunca usei o firebird.
no sql server tbem tem a funcao CAST que tem a seguinte sintaxe:

CAST ( expression AS data_type )

sintaxe do convert:

CONVERT ( data_type [ ( length ) ] , expression [ , style ] )


Achei isso no forum do Firebase

A função CAST faz a conversão do tipo do dado.
Por exemplo, se você deseja concatenar um campo numérico com um
campo alfanumérico você precisa antes converter o número para string, como
no exemplo abaixo:

select Cast(CampoNumerico As VarChar(Tamanho)) || CampoAlfaNumerico
from Tabela


GOSTEI 0
Salupe

Salupe

30/11/2006

Quase lá.

A Função cast fez a conversao que eu precisava, só que ficou um probleminha.

Tem alguma função pra fazer aparecer zeros nos espaços em branco,
tipo assim

o numero recebido seria
1
1
1
1
0

e ele ficaria assim

1
1
01
01
00000

no cast eu indiquei o tamanho da variável que iria ficar, mas ele aparece somente o que existe.

Agradeço antecipadamente qualquer ajuda.

E obrigado Arc pela ajuda dada.


GOSTEI 0
Arc

Arc

30/11/2006

Nossa, essa questões de zero a esquerda não são faceis...
Essas informações da sua tabela, tem algum padrão de tamanho nas colunas de valor ??? todas as colunas tem o mesmo numero de caracteres ???
Não sei se existe alguma função, mas assim de imediato, eu faria um ´case´ verificando o tamanho dessas colunas convertidas e concatenando com zeros.


GOSTEI 0
Salupe

Salupe

30/11/2006

Elas são numericas simplesmente, só que basicamente assim

o primeiro e o segundo campos não passam de 9.
o terceiro e quarto não passam de 99
e o quinto pode ir até 99999

só que com o detalhe de ter que aparecer os zeros no lugar onde o numero for menor que o tamanho que ele pode chegar.

Sei que estou pedindo demais mas, poderia me dar um exemplo de case.

Nunca usei e não sei como faze-lo no sql.

Agradeço antecipadamente qualquer ajuda.


GOSTEI 0
Arc

Arc

30/11/2006

fiz um exemplo usando o convert, acredito que vc tenha usado o cast, mas é só mudar...não sei se seria a melhor forma de executar a query, mas....

select
case len(campo1)
when 1 then ´00´+ convert(varchar,campo1)
when 2 then ´0´+ convert(varchar,campo1)
else convert(varchar,vl1)
end
+
case len(campo1)
when 1 then ´00´+ convert(varchar,campo2)
when 2 then ´0´+ convert(varchar,campo2)
else convert(varchar,campo2)
end
from tabela
order
by 1


GOSTEI 0
Arc

Arc

30/11/2006

ha, no segundo case é campo2


GOSTEI 0
Salupe

Salupe

30/11/2006

Não sei porque nem o len nem o convert foi aceito na query, mas consegui fazer utilizando o case um pouquinho diferente fazendo assim

no campo 3 que teria que ser no máximo até 99 verfiquei se o valor fosse menor ou igual a 9 o resto foi igual a sua rotina só que em vez de convert usei o cast mesmo.

Obrigado pela ajuda Arc, valeu mesmo.


GOSTEI 0
POSTAR