Fórum [Erro] Conversion error from string quot;18/06/1985quot; #323017
07/06/2006
0
tenho uma tabela do firebird que tem um campo que teria que ser data, mas está como varchar (12)... gostaria de converter o campo para tipo DATA, sem perder os registros que tem na tabela.
Conversando com um amigo ele me sugeriu criar um campo tipo data e copiar os dados do campo antigo para o campo novo da seguinte maneira:
update TABELA set CAMPO_NOVO = CAMPO_VELHO
porém o formato de datas do firebird se nao me engano é DD.MM.YYY e na minha tabela está DD/MM/YYY, sendo que quando eu tento converter pelo update ele me gera o erro:
Conversion error from string "18/06/1985" Statement: update ELEITORES set DATA_FILIACAO=DATA_CADASTRO
sei que deve ter algo para converter de um tipo para o outro como:
QuotedStr(FormatDateTime(´DD.MM.YYYY´,Now))+´,´;
mas nao to conseguindo me situar aqui para converter o formato... alguem poderia me ajudar??
Abraços!
Mahdak
Curtir tópico
+ 0Posts
07/06/2006
Thomaz_prg
update TABELA set CampoNovo = Cast( Substring(CampoNovo from 1 for 2) || ´.´ || Substring(CampoNovo from 4 for 2) || ´.´ || Substring(CampoNovo from 7 for 4) as Date )
Creio que isso resolva.
Gostei + 0
08/06/2006
Mahdak
update TABELA set CampoNovo = Cast( Substring(CampoNovo from 1 for 2) || ´.´ || Substring(CampoNovo from 4 for 2) || ´.´ || Substring(CampoNovo from 7 for 4) as Date )
Thomas e onde vai o campo velho?? eu preciso tambem importar os dados do campo velho pro campo novo
Gostei + 0
08/06/2006
Mahdak
update TABELA set DATA_FILIACAO = Cast( Substring(DATA_CADASTRO from 1 for 2) || ´.´ || Substring(DATA_CADASTRO from 4 for 2) || ´.´ || Substring(DATA_CADASTRO from 7 for 4) as Date )
erro:
SQL error code = -204 Table unknown TABELA At line 1, column 15 Statement: update TABELA set DATA_FILIACAO = Cast( Substring(DATA_CADASTRO from 1 for 2) || ´.´ || Substring(DATA_CADASTRO from 4 for 2) || ´.´ || Substring(DATA_CADASTRO from 7 for 4) as Date )
e agora??? :shock:
Gostei + 0
08/06/2006
Mahdak
Overflow occurred during data type conversion. conversion error from string "18.16.1985".
Gostei + 0
08/06/2006
Thomaz_prg
update TABELA set CampoNovo = Cast( Substring(CampoVelho from 1 for 2) || ´.´ || Substring(CampoVelho from 4 for 2) || ´.´ || Substring(CampoVelho from 7 for 4) as Date )
Onde está a palavra TABELA no campo acima, você coloca o nome da sua tabela.
Gostei + 0
13/06/2006
Mahdak
Código sugerido:
-------------------
update TABELA set CampoNovo = Cast( Substring(CampoVelho from 1 for 2) || ´.´ || Substring(CampoVelho from 4 for 2) || ´.´ || Substring(CampoVelho from 7 for 4) as Date )
Estrutura da tabela:
-----------------------
Formato atual da data: DD/MM/YYY
CREATE TABLE ELEITORES ( CODIGO INTEGER NOT NULL, CODIGO_DIR INTEGER, NOME VARCHAR(50) NOT NULL, FILIADO VARCHAR(3), TIPO_VOTO VARCHAR(1), RG VARCHAR(50), CPF VARCHAR(50), SEXO VARCHAR(10), NATURALIDADE VARCHAR(50), NACIONALIDADE VARCHAR(50), NASCIMENTO VARCHAR(12), FONE1 VARCHAR(50), FONE2 VARCHAR(50), EMAIL VARCHAR(50), CODIGO_EDIFICIO INTEGER, BLOCO VARCHAR(50), APTO VARCHAR(50), CODIGO_LOGRADOURO INTEGER, NUMERO VARCHAR(30), CODIGO_BAIRRO INTEGER, CODIGO_CIDADE INTEGER, CODIGO_UF INTEGER, CEP VARCHAR(30), IMEDIACOES VARCHAR(50), DATA_CADASTRO VARCHAR(12), ZONA VARCHAR(20), SECAO VARCHAR(20), DATA_FILIACAO DATE ); ALTER TABLE ELEITORES ADD CONSTRAINT PK_ELEITORES PRIMARY KEY (CODIGO);
Codigo implementado:
--------------------------
update ELEITORES set DATA_FILIACAO = Cast( Substring(DATA_CADASTRO from 1 for 2) || ´.´ || Substring(DATA_CADASTRO from 4 for 2) || ´.´ || Substring(DATA_CADASTRO from 7 for 4) as Date )
Erro Gerado:
---------------
Overflow occurred during data type conversion. conversion error from string "18.16.1985".
Observações:
- para fazer a conversão estou usando o SQL Editor do IBExpert 2.0.56
Abraços!
Gostei + 0
13/06/2006
Martins
Teria algum inconveniente?
Qualquer coisa, estamos aqui para tentar ajudar
Gostei + 0
13/06/2006
Martins
update ELEITORES set DATA_FILIACAO = Substring(DATA_CADASTRO from 1 for 2) || ´.´ || Substring(DATA_CADASTRO from 4 for 2) || ´.´ || Substring(DATA_CADASTRO from 7 for 4)
Boa sorte!!!
Gostei + 0
13/06/2006
Mahdak
criei a tabela ´temporaria´ com a mesma estrutura da tabela´eleitores´ - com exceção do campo ´DATA_CADSTRO´, que na tabela ´temporária´ eu coloquei como DATE - e importei todos os dados....
código responsavel por copiar do campo varchar pro campo date:
DM.Tbl_TMPDATA_CADASTRO.AsDateTime := StrToDateTime(copy(DM.Tbl_EleitoresDATA_CADASTRO.asstring,01,02) + ´/´ + Copy(DM.Tbl_EleitoresDATA_CADASTRO.asstring,04,02) +´/´+ Copy(DM.Tbl_EleitoresDATA_CADASTRO.asstring,07,04));
Gostei + 0
13/06/2006
Vinicius2k
A solução já foi encontrada, mas apenas para constar que a instrução funciona corretamente:
update ELEITORES set DATA_FILIACAO = cast( substring(DATA_CADASTRO from 1 for 2) || ´.´ || substring(DATA_CADASTRO from 4 for 2) || ´.´ || substring(DATA_CADASTRO from 7 for 4) as date )
A sintaxe está correta e, para que não restassem dúvidas testei-a no FB 1.5.3 também com o IBExpert.
Porém há que se ter um cuidado: a existência de uma data inválida na coluna VARCHAR causará erro na execução e, pela mensagem de erro que você mencionou [i:697c3807ac](...error from string [b:697c3807ac]18.16.1985[/b:697c3807ac][/i:697c3807ac]), me parece que era isto que estava ocorrendo.
Gostei + 0
14/06/2006
Martins
update ELEITORES set DATA_FILIACAO = cast( substring(DATA_CADASTRO from 1 for 2) || ´.´ || substring(DATA_CADASTRO from 4 for 2) || ´.´ || substring(DATA_CADASTRO from 7 for 4) as date )
Ótima observação Vinicius2K, esse detalhe passou despercebido.
Mandou bem novamente.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)