CONVERTER VARCHAR EM DATE MYSQL

DAMASCENO.CESAR 02/05/2016 15:58:53
#461771
Boa tarde, tenho uma tabela com mais de 10.000 registros onde o seu [Ô]criador[Ô] fez a [Ô]bondade[Ô] de criar um campo com o nome Data no formato VARCHAR, então gostaria de saber se em como dar um UPDATE em toda a tabela para transformar os dados de VARCHAR em Date, sem ter que criar outra tabela e converter registro por registro.
Só tenho acesso ao Banco via programação ou HeidySQL
se for possível... me falem
obrigado.
XLEGENDARY 02/05/2016 16:10:59
#461772
Não consegue exportar o registro e depois inserir com o campo modificado? Dai é só usar o ALTER TABLE ou deletar o campo e dar um CREATE e importar pra lá.
tem monte de jeito de fazer, depende muito de como a data está sendo mostrada.
se não tiver como exportar pelo sgbd, usa o proprio vb.
DAMASCENO.CESAR 02/05/2016 16:47:09
#461774
XLEGENDARY, gostaria de saber se tem algum modo de fazê-lo se precisar dar um while para percorrer todos os registros e inserir ou alterar um a um, pois fazer de um a um é fácil:
while datareader.read
[Ô]update Tabela SET data =[ô][Ô] & format(datareader([Ô]data[Ô]),[Ô]yyyy-MM-dd[Ô]) & [Ô][ô] WHERE data =[ô][Ô] & datareader([Ô]data[Ô]) & [Ô][ô];[Ô]
end while

se fosse possível sem o WHILE seria interessante saber
MESTRE 02/05/2016 16:57:49
#461775
Resposta escolhida
Ja tentou utilizando STR_TO_DATE?
KERPLUNK 02/05/2016 17:35:57
#461779
O melhor é criar um campo novo para depois excluir o campo antigo. Você pode [Ô]converter[Ô] os dados para esse campo novo com um único comando SQL e em seguida excluir o campo antigo. Mas atenção, é possível que hajam valores em alguns registros que não seriam possíveis de se converter.
JABA 02/05/2016 17:37:14
#461780
Se alterar (alter column) a estrutura da tabela, já com os dados contidos, não resolveria? Dependendo de como as datas estejam formatadas, talvez você consiga desta forma. Se reclamar, tu poderia retirar as restrições impostas para a tabela, alterar a estrutura da coluna, depois trazer de volta as restrições, como estava anteriormente.
KERPLUNK 02/05/2016 17:42:01
#461781
O melhor é criar um campo novo para depois excluir o campo antigo. Você pode [Ô]converter[Ô] os dados para esse campo novo com um único comando SQL e em seguida excluir o campo antigo. Mas atenção, é possível que hajam valores em alguns registros que não seriam possíveis de se converter.
ACCIOLLY 02/05/2016 17:50:40
#461782
Citação:

:
Se alterar (alter column) a estrutura da tabela, já com os dados contidos, não resolveria? Dependendo de como as datas estejam formatadas, talvez você consiga desta forma. Se reclamar, tu poderia retirar as restrições impostas para a tabela, alterar a estrutura da coluna, depois trazer de volta as restrições, como estava anteriormente.



Aí vai depender mesmo do formato já que o padrão do MySql é yyyy-mm-dd. é muito provavel que o cara já deixou em varchar por preguiça de converter pra dd/mm/yyyy.
Se for isso mesmo DAMACENO, o negócio vai ser fazer do jeito que o Kerplunk disse! Cria um novo campo e salva todas as datas no formato certo pra não dar zica.
XLEGENDARY 02/05/2016 20:17:20
#461791
Citação:

:
XLEGENDARY, gostaria de saber se tem algum modo de fazê-lo se precisar dar um while para percorrer todos os registros e inserir ou alterar um a um, pois fazer de um a um é fácil:
while datareader.read
[Ô]update Tabela SET data =[ô][Ô] & format(datareader([Ô]data[Ô]),[Ô]yyyy-MM-dd[Ô]) & [Ô][ô] WHERE data =[ô][Ô] & datareader([Ô]data[Ô]) & [Ô][ô];[Ô]
end while

se fosse possível sem o WHILE seria interessante saber



O que eu quis dizer é exatamente o que o KERPLUNK disse e não um por um.

outra coisa, se vc poe dentro do while o seu datareader e na condição where vc diz que quer alterar o campo com a data estipulada pelo seu parametro, claramente ele irá alterar um por um
verifica primeiro quais os registros serão afetados pela mudança do campo se for mssql usa isdate, se for mysql str_to_date.
se nenhum for afetado então basta vc criar um novo campo date e passar os valores do campo antigo para o novo. Se houver afetados, converta para o formato permitido e lance os dados na nova tabela, a chance de dar erro existe, porém é minima.

Eu passei 3 milhoes ++ de registros de tabelas paradox para mysql onde campos varchar eram usados para salvar data e resolvi tudo com uma única query convertendo os valores e excluindo a tabela antiga após criar uma nova.
DAMASCENO.CESAR 03/05/2016 16:40:00
#461809
Pessoal, desculpem a demora pra responder, é que meu dia foi corrido ao máximo e só agora pude ver as respostas:
os dados estão formato dd/MM/yyyy, então terei que convertê-los para yyyy-MM-dd.
hoje não dá mais tempo pra eu fazer nada, saio em 20 minutos e tenho curso ainda a noite.
Amanhã vou analisar as respostas com calma e ver qual daria mais certo. ainda bem que tenho como fazer um backup da tabela caso dê errado rsrsrs
amanhã devo encerrar o tópico.
obrigado a todos pela ajuda
DAMASCENO.CESAR 06/05/2016 13:47:06
#461868
Após um periodo de hibernação, retorno ao tópico (rsrs)
Pessoal, segui o conselho do KERPLUNK e criei um novo campo no formato Date, usei essa SQL só que não retorna resultado, numa cópia da tabela usei no proprio campo e apagou todos os dados do campo, se puderem me dizer o que há de errado...

[Ô]UPDATE 'fichas_Vel' SET 'Data1' = str_to_date('data', [ô]%y-%M-%d[ô])[Ô]

também usei
[Ô]UPDATE 'fichas_Vel' SET 'Data' = str_to_date('data', [ô]%y-%M-%d[ô])[Ô]

essa ultima apagou os dados do campo rsrs
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas