Amigos,
Em um arquivo CSV tenho valores como ‘52,77’, ‘48,8’, ‘1.298,4’, ‘2.725,76’, como faço para transformar esses valores e gravar em capo campo decimal do MySql.
Obrigado
Amigos,
Em um arquivo CSV tenho valores como ‘52,77’, ‘48,8’, ‘1.298,4’, ‘2.725,76’, como faço para transformar esses valores e gravar em capo campo decimal do MySql.
Obrigado
George,
Não entendi muito bem, mas se foi o que eu entendi:
Utilize editor de texto e substitua primeiro o “.” por nada e depois as virgulas por ponto e manda inserir.
Pode utilizar o php também, utilizando o str_replace.
Abs.
Marcelo,
Não posso editar manualmente, são centenas de valores e a importação é em uma rotina.
Obrigado
Na rotina de importação não tem como editar o valor antes de inserir ?
Bom dia Cleyton,
Tenho que fazer a conversão dos valores através de comandos na rotina, mais não consegui.
A rotina está em PHP ?
Sim, em PHP.
Posta ai pra gente analisar
// APAGA IMPORTACOES
sc_exec_sql(“delete
from fin_consignacoes_importa”);
// NOME DOS ARQUIVOS
$file1 = {ativos_inativos};
// DEFINE CARACTER SEPARADOR
$caracter = ‘;’;
$replace = ‘"’;
// CAMINHO DO ATIVOS E INATIVOS
$arq1 = $dir.’/ativos_inativos.csv’;
// ABRE O ARQUIVO ATIVOS E INATIVOS
$fp = fopen($arq1,‘r’);
// LER O CABECALHO ATIVOS E INATIVOS E NAO FAZ NADA
$linha = fgets($fp);
// PROCESSA ATIVOS E INATIVOS
while(($linha = fgets($fp) )!==false){
$campos = explode($caracter,$linha);
$vmatricula = $campos[0];
$vcpf = $campos[1];
$vnome = $campos[2];
$vvalor = $campos[4];
$vsituacao = $campos[6];
$vmatricula = str_replace($replace, “”, $vmatricula);
$vcpf = str_replace($replace, “”, $vcpf);
$vcpf = str_replace(".", “”, $vcpf);
$vcpf = str_replace("-", “”, $vcpf);
$vnome = str_replace($replace, “”, $vnome);
$vsituacao = substr($vsituacao, 0,4);
if($vsituacao == '1501' or $vsituacao == '3901'){
$vsituacao = '2';
}elseif($vsituacao == '8401'){
$vsituacao = '1';
}else{
$vsituacao = '0';
}
sc_exec_sql(“insert into fin_consignacoes_importa
values(’$vmatricula’,’$vcpf’,’$vnome’,’$vvalor’,’$vsituacao’,Null)”);
}
fclose($fp);
No INSERT o comando apresenta erro na coluna $vvalor.
Quase resolvi com a linha:
$vvalor = str_replace(",", “.”, $vvalor);
Funciona para valores <= 999,99, para valores >= 1.000,00 cancela
Depois dessa linha $vnome = str_replace($replace, “”, $vnome);
insere essas duas linhas.
$vvalor = str_replace(".", “”);
$vvalor = str_replace(",", “.”);
Como o separador de decimal está usando virgula, pode estar mudando a sintaxe mysql e dando erro.
Faz um testa mandando sem ponto e sem virgula para ver se o banco resolve.
Primeiro tira o ponto e depois troca a virgula por ponto.
Marcelo, sua sugestão não funciona.
Cleyton, a sugestão de Marcelo retirar os pontos e virgulas, não funciona.
Coma a linha que acrescentei funciona até achar um valor > 999,99
Erro ao acessar o banco de dados
Incorrect decimal value: ‘2.540.03’ for column ‘valor’ at row 1
Como retiro o primeiro ponto?
Acho que depende um pouco de como o banco está configurado. Eu tenho um campo decimal 10,2 e mando o valor sem ponto e sem virgula e o valor após o insert fica correto. Banco configurado para usar ponto como separador de decimal.
primeiro essa $vvalor = str_replace(".", “”, $vvalor);
depois essa $vvalor = str_replace(",", “.”, $vvalor);
Cleyton,
Se o valor no csv (texto) for, 8,9 no MySql fica ,89.
A dica do Marcelo tem que funcionar. O tamanho do campo está correto ?
Eu á tinha feito como a dica do Marcelo:
Se o valor no csv (texto) for, 8,9 no MySql fica ,89.
Vc precisa substituir a virgula por ponto.
$vvalor = str_replace(".", “”, $vvalor); // Aqui vc troca o primeiro ponto por nada
$vvalor = str_replace(",", “.”, $vvalor); // Aqui vc troca a última virgula por ponto