Ir para conteúdo
Fórum Script Brasil
  • 0

UPDATE ENTRE DOIS CAMPOS DE UMA TABELA


Rafael Marinho Web

Pergunta

SEGUINTE PESSOAL NA HORA DE DESENVOLVER MEU SISTEMA COMETI O ERRO DE NÃO FAZER A PARTE DE ENGENHARIA E SABER QUE MAIS NA FRENTE IRIA PRECISAR DE UM CAMPO DE DATA COM DATE PARA PODER GERAR RELATORIOS...

AI FIZ A BESTEIRA DE CRIAR UM CAMPO TIPO DATACADASTRO COMO VARCHAR E AGORA VI QUE PRECISO DELE COMO DATE. BOM O SISTEMA já ESTA COM VARIOS REGISTROS então EU ESTOU PRECISANDO FAZER UM UPDATE NESSES REGISTROS TIPO PASSANDO OS DADOS DO CAMPO DATACADASTRO QUE ESTA COMO VARCHAR PARA OUTRO CAMPO NOVO SEM NADA TIPO DATACADASTRO2 DO TIPO DATE. O PROBLEMA E COMO FAZER ESSE UPDATE MANDAR AS INFORMAÇÕES CORRETAS PARA O CAMPO TIPO ASSIM NO EXEMPLO ABAIXO

CODIGO = 1 NOME = RAFAEL DATACADASTRO=24-09-2008 ASSIM ESTA NO MEU BANCO NO UPDATE PRECISA FICAR ASSIM

CODIGO = 1 NOME = RAFAEL DATACADASTRO=24-09-2008 DATACADASTRO2=2008-09-24

CODIGO = 2 NOME = TESTE DATACADASTRO=23-08-2008 DATACADASTRO2=2008-08-23

CODIGO = 3 NOME = FULANO DATACADASTRO=20-08-2007 DATACADASTRO2=2007-08-20... E ASSIM POR DIANTE...

BOM COMO RECEBER ESSA DATA E MODIFICAR PARA ENVIAR CORRETO PARA O CAMPO DATE EU já DESCOBRI COMO FAZER O QUE EU NÃO CONSIGUI FOI FAZER O UPDATE ATUALIZAR UM POR UM CORRETAMENTE ELE SO PEGAVA UMA DATA QUALQUER DO BANCO E ALTERAVA TODAS E PRA ELE PEGAR A DATA DO CODIGO 1 E PASSAR PARA A DATACADASTRO2 E ASSIM POR DIANTE...

SE alguém PODER ME AJUDAR FICAREI MUITO GRATO

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Quase por aí...

Faz de conta que tem a tabela "socios" com o campo "data_nasc" criado erradamente como varchar(10) e um campo novo "datanasc" criado corretamente como date...

Todos os registros já tem o campo "data_nasc" preenchidos... no formato DD/MM/AAAA e agora precisa passar o conteúdo desse campo para o correto, "datanasc"...

Então, se temos:

nome, data_nasc, datanasc

maria, "21/03/1985", null

joao, "01/04/1988", null

eliseu, "31/01/1980", null

e fizermos um select primeiro:

mysql> select nome, data_nasc, convert(data_nasc, date) as novoconteudo

-> from socios;

+--------+------------+--------------+

| nome | data_nasc | novoconteudo |

+--------+------------+--------------+

| maria | 21/03/1985 | NULL |

| joao | 01/04/1988 | NULL |

| jose | 31/01/1980 | NULL |

+--------+------------+--------------+

3 rows in set, 3 warnings (0.00 sec)

assim, fazer o comando

update socios set datanasc=convert(data_nasc, date);

irá resultar em erro...

mysql> update socios set datanasc=convert(data_nasc, date);

ERROR 1292 (22007): Truncated incorrect datetime value: '21/03/1985'

porque você precisa colocar a data atual do campo varchar no formato data como dd/mm/aaaa

e não AAAA/MM/DD da função convert...

Isso dá certo:

mysql> update socios set datanasc=str_to_date(data_nasc, '%d/%m/%Y');

Query OK, 3 rows affected (1.08 sec)

Rows matched: 3 Changed: 3 Warnings: 0

Então, você pode verificar:

mysql> select nome, data_nasc, datanasc

-> from socios;

+--------+------------+------------+

| nome | data_nasc | datanasc |

+--------+------------+------------+

| maria | 21/03/1985 | 1985-03-21 |

| joao | 01/04/1988 | 1988-04-01 |

| jose | 31/01/1980 | 1980-01-31 |

+--------+------------+------------+

3 rows in set (0.00 sec)

Agora, ainda antes de processar, você precisa verificar se não tem data errada, incompleta, etc... do tipo "31/02/1980", "29/02/1971", "31/111/985" ...

Ok?

Link para o comentário
Compartilhar em outros sites

  • 0

VALEU AI paulobergo PELA AJUDA... FUNCIONOU beleza ELE PASSOU A DATA PARA O OUTRO CAMPO CERTINHO COMO EU QUERIA...

Quase por aí...

Faz de conta que tem a tabela "socios" com o campo "data_nasc" criado erradamente como varchar(10) e um campo novo "datanasc" criado corretamente como date...

Todos os registros já tem o campo "data_nasc" preenchidos... no formato DD/MM/AAAA e agora precisa passar o conteúdo desse campo para o correto, "datanasc"...

Então, se temos:

nome, data_nasc, datanasc

maria, "21/03/1985", null

joao, "01/04/1988", null

eliseu, "31/01/1980", null

e fizermos um select primeiro:

mysql> select nome, data_nasc, convert(data_nasc, date) as novoconteudo

-> from socios;

+--------+------------+--------------+

| nome | data_nasc | novoconteudo |

+--------+------------+--------------+

| maria | 21/03/1985 | NULL |

| joao | 01/04/1988 | NULL |

| jose | 31/01/1980 | NULL |

+--------+------------+--------------+

3 rows in set, 3 warnings (0.00 sec)

assim, fazer o comando

update socios set datanasc=convert(data_nasc, date);

irá resultar em erro...

mysql> update socios set datanasc=convert(data_nasc, date);

ERROR 1292 (22007): Truncated incorrect datetime value: '21/03/1985'

porque você precisa colocar a data atual do campo varchar no formato data como dd/mm/aaaa

e não AAAA/MM/DD da função convert...

Isso dá certo:

mysql> update socios set datanasc=str_to_date(data_nasc, '%d/%m/%Y');

Query OK, 3 rows affected (1.08 sec)

Rows matched: 3 Changed: 3 Warnings: 0

Então, você pode verificar:

mysql> select nome, data_nasc, datanasc

-> from socios;

+--------+------------+------------+

| nome | data_nasc | datanasc |

+--------+------------+------------+

| maria | 21/03/1985 | 1985-03-21 |

| joao | 01/04/1988 | 1988-04-01 |

| jose | 31/01/1980 | 1980-01-31 |

+--------+------------+------------+

3 rows in set (0.00 sec)

Agora, ainda antes de processar, você precisa verificar se não tem data errada, incompleta, etc... do tipo "31/02/1980", "29/02/1971", "31/111/985" ...

Ok?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...