Fórum Ordenar por campo calculado transformado #333935

30/11/2006

0

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

Responder

Posts

30/11/2006

Arc

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


Responder

Gostei + 0

30/11/2006

Salupe

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.


Responder

Gostei + 0

30/11/2006

Arc

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


Responder

Gostei + 0

30/11/2006

Salupe

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.


Responder

Gostei + 0

30/11/2006

Arc

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.


Responder

Gostei + 0

30/11/2006

Salupe

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.


Responder

Gostei + 0

30/11/2006

Arc

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


Responder

Gostei + 0

30/11/2006

Arc

ha, no segundo case é campo2


Responder

Gostei + 0

30/11/2006

Salupe

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.


Responder

Gostei + 0

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

Aceitar