Ordenar por campo calculado transformado
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.
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
Curtidas 0
Respostas
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
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
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.
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
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
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
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.
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
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.
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
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.
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
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
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
30/11/2006
ha, no segundo case é campo2
GOSTEI 0
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.
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