[Erro] Conversion error from string quot;18/06/1985quot;

Delphi

07/06/2006

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:

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

Mahdak

Curtidas 0

Respostas

Thomaz_prg

Thomaz_prg

07/06/2006

tente assim:

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

Mahdak

07/06/2006

tente assim:
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.



Thomas e onde vai o campo velho?? eu preciso tambem importar os dados do campo velho pro campo novo


GOSTEI 0
Mahdak

Mahdak

07/06/2006

se eu fizer assim da erro:

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

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

Thomaz_prg

07/06/2006

Amigo, desculpe, o código é esse:

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

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:
-------------------
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

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


GOSTEI 0
Martins

Martins

07/06/2006

Estou sem Firebird, mas poderiamos tentar algo assim tb.

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

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:
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

Vinicius2k

07/06/2006

Colegas,

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

Martins

07/06/2006

Colegas, 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:02f0745d69](...error from string [b:02f0745d69]18.16.1985[/b:02f0745d69][/i:02f0745d69]), me parece que era isto que estava ocorrendo.


Ótima observação Vinicius2K, esse detalhe passou despercebido.

Mandou bem novamente.


GOSTEI 0
POSTAR