[Erro] Conversion error from string quot;18/06/1985quot;
boa tarde amigos....
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:
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!
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
Curtidas 0
Respostas
Thomaz_prg
07/06/2006
tente assim:
Creio que isso resolva.
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
Mahdak
07/06/2006
tente assim:
Creio que isso resolva.
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
Mahdak
07/06/2006
se eu fizer assim da erro:
erro:
e agora??? :shock:
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
Mahdak
07/06/2006
pelo IBExpert da esse erro:
Overflow occurred during data type conversion. conversion error from string "18.16.1985".
GOSTEI 0
Thomaz_prg
07/06/2006
Amigo, desculpe, o código é esse:
Onde está a palavra TABELA no campo acima, você coloca o nome da sua tabela.
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
Mahdak
07/06/2006
Amigo, não deu ainda... vamos tentar resolver isso de uma vez? vou postar aqui a estrutura da minha tabela pra vc analizar...
Código sugerido:
-------------------
Estrutura da tabela:
-----------------------
Formato atual da data: DD/MM/YYY
Codigo implementado:
--------------------------
Erro Gerado:
---------------
Observações:
- para fazer a conversão estou usando o SQL Editor do IBExpert 2.0.56
Abraços!
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
Martins
07/06/2006
Já q vc tem um outro campo, pq vc não faz isso pelo Delphi mesmo?
Teria algum inconveniente?
Qualquer coisa, estamos aqui para tentar ajudar
Teria algum inconveniente?
Qualquer coisa, estamos aqui para tentar ajudar
GOSTEI 0
Martins
07/06/2006
Estou sem Firebird, mas poderiamos tentar algo assim tb.
Boa sorte!!!
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
Mahdak
07/06/2006
amigos, problema resolvido via delphi...
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:
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
Vinicius2k
07/06/2006
Colegas,
A solução já foi encontrada, mas apenas para constar que a instrução funciona corretamente:
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.
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
Martins
07/06/2006
Colegas,
A solução já foi encontrada, mas apenas para constar que a instrução funciona corretamente:
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:02f0745d69](...error from string [b:02f0745d69]18.16.1985[/b:02f0745d69][/i:02f0745d69]), me parece que era isto que estava ocorrendo.
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