Usuário com melhor resposta
conversão para float p/ isnumeric

Pergunta
-
estou carregando um arquivo txt. nele existe um campo valor. nele existem valores igual a ' - '.
eu carrego o arquivo todo. e aí quando vou fazer o select da minha tabela, quero pegar todos os valores onde seja diferente de ' - '. aí poderia fazer:
select CAST(REPLACE(REPLACE(valor ,'.',''),',','.') AS FLOAT), * from #tabela
WHERE ISNUMERIC(CAST(valor AS FLOAT)) = 1porém, isso não funciona porque estou tentando converter ' - ' em numero. e isso não é válido. porém, também não posso simplesmente fazer where valor <> ' - '. porque afetaria outros arquivo que tenho q ler.
o que eu queria é fazer uma coisa mais ou menos assim: where isnumeric(valor) = 1. aí me traria só valor que numérico.
Respostas
-
Rafa,
Isso, exatamente esses dados, sem os mesmos eu posso gerar um script que não condiz com a sua realidade.
Segue abaixo um script que trata este problema.
IF(OBJECT_ID('TabelaRafa') IS NOT NULL) DROP TABLE TabelaRafa CREATE TABLE TabelaRafa ( Texto VARCHAR(100) ) INSERT INTO TabelaRafa(Texto) VALUES ('5487747444'), ('1877444,35'), (' - ') SELECT CAST(RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(REPLACE(Texto, '.', 'a'), ',', 'B'), 'a', ','), 'b', '.'))) AS DECIMAL(18,2)) FROM TabelaRafa WHERE ISNUMERIC(RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(REPLACE(Texto, '.', 'a'), ',', 'B'), 'a', ','), 'b', '.')))) = 1 AND LEN(REPLACE(RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(REPLACE(Texto, '.', 'a'), ',', 'B'), 'a', ','), 'b', '.'))), '-', '')) > 0
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Marcado como Resposta rafa-martin terça-feira, 26 de março de 2013 18:29
Todas as Respostas
-
Rafa,
Não entendi, aonde esta o sinal "-" no seu texto? Poste uma massa dos seus dados originais e como gostaria que eles viessem (Cuidado com a formatação ao postar os dados.)
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com -
esse sinal vem no arquivo que está em um local da rede. apara carregar faço um bulk.
acontece que preciso fazer alguns tratamentos. só que como esse é uma string, não consigo fazer o tratamento que quero mais outros registros que são números. por exemplo: tenho um tabela com a coluna valor do tipo float. aí quero inserir os registro da coluna que está no arquivo nessa tabela. então o que eu faria:
insert into tabela (valor) select cast(replace(replace(valor1 ,'.',''),',','.') as float)from #tabela_bulk
só que quando chegasse na linha do arquivo que tem o sinal daria erro, dizendo que não pode converter um varchar em float.
por isso precisaria fazer por exemplo algo mais ou menos assim:
insert into tabela (valor) select cast(replace(replace(valor1 ,'.',''),',','.') as float)from #tabela_bulk where isnumeric(valor1) = 1. essa forma também não daria, mais é mais ou menos o que teria que ser feito.
entendeu?
-
Rafa,
Entendi sim. Poste os dados para te ajudar melhor.
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com -
q dados? cara é assim: o arquivo tem esses valores:
5487747444
1877444,35
-
é isso que vem no arquivo. aí faço um bulk numa tabela temporaria. ao final, na minha tabela tenho esses valores. aí preciso fazer o que disse acima? ou seja, preciso trazer os dois primeiros registros sem fazer no where valor <> ' - '. preciso fazer uma coisa mais genérica. do tipo isnumeric.
-
Rafa,
Isso, exatamente esses dados, sem os mesmos eu posso gerar um script que não condiz com a sua realidade.
Segue abaixo um script que trata este problema.
IF(OBJECT_ID('TabelaRafa') IS NOT NULL) DROP TABLE TabelaRafa CREATE TABLE TabelaRafa ( Texto VARCHAR(100) ) INSERT INTO TabelaRafa(Texto) VALUES ('5487747444'), ('1877444,35'), (' - ') SELECT CAST(RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(REPLACE(Texto, '.', 'a'), ',', 'B'), 'a', ','), 'b', '.'))) AS DECIMAL(18,2)) FROM TabelaRafa WHERE ISNUMERIC(RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(REPLACE(Texto, '.', 'a'), ',', 'B'), 'a', ','), 'b', '.')))) = 1 AND LEN(REPLACE(RTRIM(LTRIM(REPLACE(REPLACE(REPLACE(REPLACE(Texto, '.', 'a'), ',', 'B'), 'a', ','), 'b', '.'))), '-', '')) > 0
Fabrizzio A. Caputo
MCT
Certificações:
Oracle OCA 11g
MCITP SQL Server 2008 Implementation and Maintenance
MCITP SQL Server 2008 Developer
ITIL V3 Foundation
Blog Pessoal: www.fabrizziocaputo.wordpress.com
Twitter: @FabrizzioCaputo
Email: fabrizzio.antoniaci@gmail.com- Marcado como Resposta rafa-martin terça-feira, 26 de março de 2013 18:29
-