Converter de String para Numérico
Preciso somar 4 notas sendo que as mesmas são do tipo string:
Select n1,n2,n3,n4, n1+n2+n3+n4 as Total from notas
o campo total passa ser do tipo float.
Quando eu executo apresenta um erro de conversão....
existe alguma função que converta de string para numérico?
Desde já agradeço!
Fabíola
Select n1,n2,n3,n4, n1+n2+n3+n4 as Total from notas
o campo total passa ser do tipo float.
Quando eu executo apresenta um erro de conversão....
existe alguma função que converta de string para numérico?
Desde já agradeço!
Fabíola
Fea
Curtidas 0
Respostas
Afarias
29/09/2003
bom -- se notas são números, a melhor coisa q vc podia fazer para seu sistema é criar os campos como número!
agora, para converter dados, vc pode usar a função CAST, ex::
select CAST(campo_tal as NUMERIC(8,2)) from tabela
mas os números deverão ter como separador de decimais o ´.´ (ponto) ou então não vai sair ´muito correto´.
T+
agora, para converter dados, vc pode usar a função CAST, ex::
select CAST(campo_tal as NUMERIC(8,2)) from tabela
mas os números deverão ter como separador de decimais o ´.´ (ponto) ou então não vai sair ´muito correto´.
T+
GOSTEI 0
Bruno Belchior
29/09/2003
Estou exatamente com esse mesmo problema... Só que as notas são gravadas com ´,´ e como o colega afarias falou não está resolvendo meu problema...
GOSTEI 0
Martins
29/09/2003
bom -- se notas são números, a melhor coisa q vc podia fazer para seu sistema é criar os campos como número!
agora, para converter dados, vc pode usar a função CAST, ex::
select CAST(campo_tal as NUMERIC(8,2)) from tabela
mas os números deverão ter como separador de decimais o ´.´ (ponto) ou então não vai sair ´muito correto´.
T+
E no caso do separador decimal igual a ´,´ como contornar essa dor de cabeça?
Aguardo retorno.
GOSTEI 0
Alexandre_torres
29/09/2003
Olá pessoal,
Desculpem minha ingnorância mas alguém poderia me explicar nesta expresão select CAST(campo_tal as NUMERIC(8,2)) from tabela que o nosso afarias colocou.
qual a função do CAST?
thakiou.
Desculpem minha ingnorância mas alguém poderia me explicar nesta expresão select CAST(campo_tal as NUMERIC(8,2)) from tabela que o nosso afarias colocou.
qual a função do CAST?
thakiou.
GOSTEI 0
Bruno Belchior
29/09/2003
O cast tem a função de converter dados de um tipo para outro, um campo com a string ´1´ pode virar um integer 1 fazendo:
cast(campo as integer)
GOSTEI 0
Martins
29/09/2003
[quote:23f16358d2=´Bruno Belchior´]O cast tem a função de converter dados de um tipo para outro, um campo com a string ´1´ pode virar um integer 1 fazendo:[/quote:23f16358d2]
No SQL Server vc tem ainda [b:23f16358d2]Convert[/b:23f16358d2]
cast(campo as integer)
No SQL Server vc tem ainda [b:23f16358d2]Convert[/b:23f16358d2]
GOSTEI 0
Lorde_morte.
29/09/2003
Quando o campo é null o CAST retorna null.
Como converter um campo para integer, mas quando for null retornar 0?
Como converter um campo para integer, mas quando for null retornar 0?
GOSTEI 0
Emerson Nascimento
29/09/2003
use coalesce()
cast(coalesce(campo,´0´) as integer)
funciona a partir do FB 1.5
cast(coalesce(campo,´0´) as integer)
funciona a partir do FB 1.5
GOSTEI 0
Emerson Nascimento
29/09/2003
ou
coalesce(cast(campo as integer),0)
coalesce(cast(campo as integer),0)
GOSTEI 0
Lorde_morte.
29/09/2003
Erro:
Dynamic SQL Error
SQL error code = -804
Function unknown
COALESCE
Statement: select coalesce(sum(Quantidadeentrada),0)-(sum(QUANTIDADESAIDASINCAL)+ sum(QUANTIDADESAIDAROTATIVO)) from movimentacao,guias
where
codigoidentificador=identificador and
codigoitem=´6515.03.075-80´ and
data<=cast(´02/01/2006´ as date)
order by data,idmovimentacao
Eu fiz algo errado?
Estou usando o interbase 6.5
Desde já obrigado.
Dynamic SQL Error
SQL error code = -804
Function unknown
COALESCE
Statement: select coalesce(sum(Quantidadeentrada),0)-(sum(QUANTIDADESAIDASINCAL)+ sum(QUANTIDADESAIDAROTATIVO)) from movimentacao,guias
where
codigoidentificador=identificador and
codigoitem=´6515.03.075-80´ and
data<=cast(´02/01/2006´ as date)
order by data,idmovimentacao
Eu fiz algo errado?
Estou usando o interbase 6.5
Desde já obrigado.
GOSTEI 0
Emerson Nascimento
29/09/2003
essa função não existe no Interbase.
somente no Firebird, a partir da versão 1.5.
somente no Firebird, a partir da versão 1.5.
GOSTEI 0
Lorde_morte.
29/09/2003
emerson.en, muito obrido pela atenção.
Mas infelizmente o meu problema continua. :cry:
Eu preciso fazer essa soma funcionar mesmo que um dos três parâmetros seja null.
Alguem tem alguma solução?
Mas infelizmente o meu problema continua. :cry:
select sum(Quantidadeentrada)-(sum(QUANTIDADESAIDASINCAL)+ sum(QUANTIDADESAIDAROTATIVO)) from movimentacao,guias
Eu preciso fazer essa soma funcionar mesmo que um dos três parâmetros seja null.
Alguem tem alguma solução?
GOSTEI 0
Emerson Nascimento
29/09/2003
no IB 6.5 tem o comando case?
GOSTEI 0
Lorde_morte.
29/09/2003
Mais erro:
Dynamic SQL Error
SQL error code = -104
Token unknown - line 3, char 2
WHEN
Statement:
select sum(Quantidadeentrada),sum(QUANTIDADESAIDASINCAL), sum(QUANTIDADESAIDAROTATIVO),
CASE
WHEN (sum(Quantidadeentrada)) IS NULL THEN ´0´
END AS TESTE
from movimentacao,guias
where
codigoidentificador=identificador and
codigoitem=´6515.03.075-80´ and
data<=cast(´02/01/2006´ as date)
order by data,idmovimentacao
GOSTEI 0
Emerson Nascimento
29/09/2003
não conheço a sintaxe no IB, mas tente assim:
ou
select sum(Quantidadeentrada), sum(QUANTIDADESAIDASINCAL), sum(QUANTIDADESAIDAROTATIVO), (CASE WHEN sum(Quantidadeentrada) IS NULL THEN 0 ELSE sum(Quantidadeentrada) END) AS TESTE from movimentacao inner join guias on (guias.identificador = movimentacao.codigoidentificador) where codigoitem=´6515.03.075-80´ and data<=cast(´02/01/2006´ as date) order by data, idmovimentacao
ou
select sum(Quantidadeentrada), sum(QUANTIDADESAIDASINCAL), sum(QUANTIDADESAIDAROTATIVO), (CASE sum(Quantidadeentrada) IS NULL THEN 0 ELSE sum(Quantidadeentrada) END) AS TESTE from movimentacao inner join guias on (guias.identificador = movimentacao.codigoidentificador) where codigoitem=´6515.03.075-80´ and data<=cast(´02/01/2006´ as date) order by data, idmovimentacao
GOSTEI 0
Lorde_morte.
29/09/2003
:(
Nada.
Veja oque este site fala sobre o case e interbase:
[url]http://www.sqlmagazine.com.br/Colunistas/lanusse/09_funcoesinterbase.asp[/url]
http://www.sqlmagazine.com.br/Colunistas/lanusse/09_funcoesinterbase.asp
De qualquer forma valeu!
Nada.
Veja oque este site fala sobre o case e interbase:
[url]http://www.sqlmagazine.com.br/Colunistas/lanusse/09_funcoesinterbase.asp[/url]
http://www.sqlmagazine.com.br/Colunistas/lanusse/09_funcoesinterbase.asp
De qualquer forma valeu!
GOSTEI 0
Emerson Nascimento
29/09/2003
só na versão 7.5?
você pode atualizar para essa versão ou passar a usar o Firebird...
você pode atualizar para essa versão ou passar a usar o Firebird...
GOSTEI 0
Adrianaalar
29/09/2003
Está dando problema de conversão na minha query, porém o resultado aparece. Mas quando vou rodar o programa dá erro..
O que eu faço???
Select A.CD_INTE_PESS, A.NIP, A.CD_GRAD, A.CD_QUAD, A.NM_PESS, A.NM_GUER_PESS,
A.CD_SUPE, A.CD_DEPT, A.CD_DIV_ESCO,
B.CD_GRAD, SUM((CAST(B.NR_ANO as NUMERIC)*365)+(CAST(B.NR_MES as NUMERIC)*30)+(CAST(B.NR_DIAS as NUMERIC))) DIAS,
B.CD_OM, ´A´ ORDEM
from TB001 A inner join TB002 B on (A.CD_INTE_PESS = B.CD_INTE_PESS)
where
(A.CD_GRAD = ´CB´) and
((A.CD_SITU IS NOT NULL AND A.CD_SITU<>´00´ AND A.CD_SITU<>´LSAM´) OR (A.CD_SITU IS NULL))
Group by A.CD_INTE_PESS, B.CD_OM, A.NIP, A.CD_GRAD, A.CD_QUAD, A.NM_PESS,
A.NM_GUER_PESS, A.CD_SUPE, A.CD_DEPT, A.CD_DIV_ESCO,B.CD_GRAD
O que eu faço???
Select A.CD_INTE_PESS, A.NIP, A.CD_GRAD, A.CD_QUAD, A.NM_PESS, A.NM_GUER_PESS,
A.CD_SUPE, A.CD_DEPT, A.CD_DIV_ESCO,
B.CD_GRAD, SUM((CAST(B.NR_ANO as NUMERIC)*365)+(CAST(B.NR_MES as NUMERIC)*30)+(CAST(B.NR_DIAS as NUMERIC))) DIAS,
B.CD_OM, ´A´ ORDEM
from TB001 A inner join TB002 B on (A.CD_INTE_PESS = B.CD_INTE_PESS)
where
(A.CD_GRAD = ´CB´) and
((A.CD_SITU IS NOT NULL AND A.CD_SITU<>´00´ AND A.CD_SITU<>´LSAM´) OR (A.CD_SITU IS NULL))
Group by A.CD_INTE_PESS, B.CD_OM, A.NIP, A.CD_GRAD, A.CD_QUAD, A.NM_PESS,
A.NM_GUER_PESS, A.CD_SUPE, A.CD_DEPT, A.CD_DIV_ESCO,B.CD_GRAD
GOSTEI 0
Adrianaalar
29/09/2003
Está dando problema de conversão na minha query, porém o resultado aparece. Mas quando vou rodar o programa dá erro..
O que eu faço??? AHH...o B.NR_ANO,B.NR_MES E B.NR_DIAS é VARCHAR
Select A.CD_INTE_PESS, A.NIP, A.CD_GRAD, A.CD_QUAD, A.NM_PESS, A.NM_GUER_PESS,
A.CD_SUPE, A.CD_DEPT, A.CD_DIV_ESCO,
B.CD_GRAD, SUM((CAST(B.NR_ANO as NUMERIC)*365)+(CAST(B.NR_MES as NUMERIC)*30)+(CAST(B.NR_DIAS as NUMERIC))) DIAS,
B.CD_OM, ´A´ ORDEM
from TB001 A inner join TB002 B on (A.CD_INTE_PESS = B.CD_INTE_PESS)
where
(A.CD_GRAD = ´CB´) and
((A.CD_SITU IS NOT NULL AND A.CD_SITU<>´00´ AND A.CD_SITU<>´LSAM´) OR (A.CD_SITU IS NULL))
Group by A.CD_INTE_PESS, B.CD_OM, A.NIP, A.CD_GRAD, A.CD_QUAD, A.NM_PESS,
A.NM_GUER_PESS, A.CD_SUPE, A.CD_DEPT, A.CD_DIV_ESCO,B.CD_GRAD
O que eu faço??? AHH...o B.NR_ANO,B.NR_MES E B.NR_DIAS é VARCHAR
Select A.CD_INTE_PESS, A.NIP, A.CD_GRAD, A.CD_QUAD, A.NM_PESS, A.NM_GUER_PESS,
A.CD_SUPE, A.CD_DEPT, A.CD_DIV_ESCO,
B.CD_GRAD, SUM((CAST(B.NR_ANO as NUMERIC)*365)+(CAST(B.NR_MES as NUMERIC)*30)+(CAST(B.NR_DIAS as NUMERIC))) DIAS,
B.CD_OM, ´A´ ORDEM
from TB001 A inner join TB002 B on (A.CD_INTE_PESS = B.CD_INTE_PESS)
where
(A.CD_GRAD = ´CB´) and
((A.CD_SITU IS NOT NULL AND A.CD_SITU<>´00´ AND A.CD_SITU<>´LSAM´) OR (A.CD_SITU IS NULL))
Group by A.CD_INTE_PESS, B.CD_OM, A.NIP, A.CD_GRAD, A.CD_QUAD, A.NM_PESS,
A.NM_GUER_PESS, A.CD_SUPE, A.CD_DEPT, A.CD_DIV_ESCO,B.CD_GRAD
GOSTEI 0
Larry
29/09/2003
Faça o seguinte:
cast(´0´||+
case when substrlen(codigo,1,1) between ´0´ and ´9´ then cast((substrlen(codigo,1,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,2,1) between ´0´ and ´9´ then cast((substrlen(codigo,2,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,3,1) between ´0´ and ´9´ then cast((substrlen(codigo,3,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,4,1) between ´0´ and ´9´ then cast((substrlen(codigo,4,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,5,1) between ´0´ and ´9´ then cast((substrlen(codigo,5,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,6,1) between ´0´ and ´9´ then cast((substrlen(codigo,6,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,7,1) between ´0´ and ´9´ then cast((substrlen(codigo,7,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,8,1) between ´0´ and ´9´ then cast((substrlen(codigo,8,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,9,1) between ´0´ and ´9´ then cast((substrlen(codigo,9,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,10,1) between ´0´ and ´9´ then cast((substrlen(codigo,10,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,11,1) between ´0´ and ´9´ then cast((substrlen(codigo,11,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,12,1) between ´0´ and ´9´ then cast((substrlen(codigo,12,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,13,1) between ´0´ and ´9´ then cast((substrlen(codigo,13,1)) as varchar(1)) else ´´ end as bigint)
Onde ´codigo´ é um campo varchar de no maximo 13 digitos.
Ante de tudo voce deve declarar a funçao substrlen com:
declare external function substrlen cstring(80), smallint, smallint returns cstring(80) free_it entry_point ´IB_UDF_substrlen´ module_name ´ib_udf´
Desenvolvi enta função pois o cast da problema quando o campo tem null ou letras.
cast(´0´||+
case when substrlen(codigo,1,1) between ´0´ and ´9´ then cast((substrlen(codigo,1,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,2,1) between ´0´ and ´9´ then cast((substrlen(codigo,2,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,3,1) between ´0´ and ´9´ then cast((substrlen(codigo,3,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,4,1) between ´0´ and ´9´ then cast((substrlen(codigo,4,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,5,1) between ´0´ and ´9´ then cast((substrlen(codigo,5,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,6,1) between ´0´ and ´9´ then cast((substrlen(codigo,6,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,7,1) between ´0´ and ´9´ then cast((substrlen(codigo,7,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,8,1) between ´0´ and ´9´ then cast((substrlen(codigo,8,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,9,1) between ´0´ and ´9´ then cast((substrlen(codigo,9,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,10,1) between ´0´ and ´9´ then cast((substrlen(codigo,10,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,11,1) between ´0´ and ´9´ then cast((substrlen(codigo,11,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,12,1) between ´0´ and ´9´ then cast((substrlen(codigo,12,1)) as varchar(1)) else ´´ end||
case when substrlen(codigo,13,1) between ´0´ and ´9´ then cast((substrlen(codigo,13,1)) as varchar(1)) else ´´ end as bigint)
Onde ´codigo´ é um campo varchar de no maximo 13 digitos.
Ante de tudo voce deve declarar a funçao substrlen com:
declare external function substrlen cstring(80), smallint, smallint returns cstring(80) free_it entry_point ´IB_UDF_substrlen´ module_name ´ib_udf´
Desenvolvi enta função pois o cast da problema quando o campo tem null ou letras.
GOSTEI 0
Vitor
29/09/2003
select sum(isnull(Quantidadeentrada,0))-(sum(isnull(QUANTIDADESAIDASINCAL,0))+ sum(isnull(QUANTIDADESAIDAROTATIVO,0))) from movimentacao,guias
GOSTEI 0