Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Nádya

Mudar campo e dados varchar para date

Recommended Posts

Olá pessoal!

 

Estou trabalhando em uma aplicação onde uma tabela do banco de dados mysql esta com cadastros de data de aniversário no formato varchar :( . Eu já ví varias formas de manobrar isso, tipo str_to_date. Mas no fundo o que eu quero mesmo é consertar. O select que estou fazendo é para o sistema de busca com muitos filtros, e esse campo esta acabando com minhas noites de sono.

 

Eu sei que alguns iriam dizer que isso vai fazer parar de funcionar a aplicação. Mas, eu tenho autonomia para corrigir inclusive a aplicação, não somente o banco.

 

Então vamos lá: o campo é varchar e os dados estão xx/xx/xxxx, e eu preciso do campo date e converter os dados para xxxx-xx-xx. Deve ser simples no mysql, mas eu não sei fazer. Alguém pode ajudar? :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • You can also use MODIFY to change a column's type without renaming it:

    ALTER TABLE t1 MODIFY b BIGINT NOT NULL;

    MODIFY is an extension to ALTER TABLE for Oracle compatibility.

    When you use CHANGE or MODIFY, column_definition must include the data type and all attributes that should apply to the new column, other than index attributes such as PRIMARY KEY or UNIQUE. Attributes present in the original definition but not specified for the new definition are not carried forward. Suppose that a column col1 is defined as INT UNSIGNED DEFAULT 1 COMMENT 'my column' and you modify the column as follows:

    ALTER TABLE t1 MODIFY col1 BIGINT;

    The resulting column will be defined as BIGINT, but will not include the attributes UNSIGNED DEFAULT 1 COMMENT 'my column'. To retain them, the statement should be:

    ALTER TABLE t1 MODIFY col1 BIGINT UNSIGNED DEFAULT 1 COMMENT 'my column';
  • When you change a data type using CHANGE or MODIFY, MySQL tries to convert existing column values to the new type as well as possible.

    Warning

    This conversion may result in alteration of data. For example, if you shorten a string column, values may be truncated. To prevent the operation from succeeding if conversions to the new data type would result in loss of data, enable strict SQL mode before using ALTER TABLE (see Section 5.1.7, “Server SQL Modes”).

     

     

    Fonte

     

    ---------------

     

    Atente que as aplicações precisarão ser revistas e alteradas

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta, obrigada pela resposta.

Eu fiz uma tabela de teste e populei igualzinha a que eu tenho aqui. Quando fiz a conversão, todos os dados ficaram 0000-00-00, ou seja, zerou tudo.

Usei a seguinte sintaxe

ALTER TABLE teste1 MODIFY dataaniver DATE NOT NULL;

 

O que vc acha que fiz errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu prefiro criar um novo campo na tabela com o DATATYPE correto, e utilizaria a função STR_TO_DATE(campo_antigo, "%d/%m/%Y") para armazenar neste novo campo os valores corretos, depois disso eu apago o campo antigo.

 

Entendi, obrigada. vou tentar fazer, mas não sei se vou saber escrever o código direito, mas vou tentar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Entendi, obrigada. vou tentar fazer, mas não sei se vou saber escrever o código direito, mas vou tentar.

 

Motta, obrigada pela resposta.

Eu fiz uma tabela de teste e populei igualzinha a que eu tenho aqui. Quando fiz a conversão, todos os dados ficaram 0000-00-00, ou seja, zerou tudo.

Usei a seguinte sintaxe

ALTER TABLE teste1 MODIFY dataaniver DATE NOT NULL;

 

O que você acha que fiz errado?

 

Consegui, seguindo a dica do lokaodomal fui atrás dessa função STR_TO_DATE. Mas não criei uma tabela nova não.

Ficou assim:

 

UPDATE teste1 SET data3 = DATE FORMAT(STR_TO_DATE(data3, '%d/%m/%y'), '%y-%m-%d')

WHERE data3 LIKE '__/__/____'

 

Converteu tudo. No final apenas mudei o campo para date! :D

 

Obrigada a todos pela ajuda

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.