Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

Como usar algo similiar com o DEFAULT CURRENT_TIMESTAMP com o datatype DATE?

Tenho uma coluna que atualiza automaticamente o horario que foi inserida, porem ela esta com DATETIME que salva a hora tambem. Gostaria de ter o mesmo efeito só que com o datatype DATE que salva apenas o dia, tentei o codigo:

MODIFY COLUMN dt_consulta DATE DEFAULT CURRENT_TIMESTAMP 

mas não funciona, tem alguma forma de conseguir salvar o dia diretemente no MYSQL?

8 respostas

Oi José, tudo bem?

No caso, você quer que a coluna salve só o dia ou a data sem a hora?

De toda forma, seria interessante você deixar o campo como DATE e apenas retirar o mês e o ano ao imprimir.

  • Você pode descobrir que depois o cliente queira que salve a data. Então, você não precisa fazer alterações na estrutura do banco de dados.
  • Você pode usar as funções de data do MySQL para comparar datas, se necessário. Função data e hora em MySQL

O seu código não deu certo, porque você está passando um padrão TIMESTAMP mas com o tipo DATE e esse tipo trás apenas a data. Se fosse um DATETIME daria certo, já que o TIMESTAMP retorna o dia e a hora.

Qualquer coisa podemos ir falando sobre isso, tá bom? :)

solução!

Olá José Cláudio, tudo bem? Nesse caso você precisa apenas da data atual ou seja "2020-07-14", então você deve usar a função CURDATE() da seguinte forma:

ALTER TABLE nome_da_tabela  MODIFY COLUMN dt_consulta DATE DEFAULT (CURDATE());

Os parenteses em (CURDATE()) indicam que você está usando uma expressão e não valores literais como fala na documentação.

Espero ter esclarecido sua dúvida!

Ola Maria, eu gostaria de salvar a data no formato ISO Y-m-d pra facilitar nas consultas, pois não teria que fazer um BETWEEN quando eu precisar achar os dados salvos em um determinado dia

Boa tarde Jonilson, Ao tentar executar esse comando eu recebi um erro de syntaxe:

Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '(CURDATE())' at line 1

Oi José,

O formato que o MySQL utiliza é o padrão ISO: AAAA-MM-DD, no caso então você pode continuar com o tipo DATE.

Referente ao comando do Jonilson, eu testei e deu certo. Se puder me mandar como está fazendo o comando, fica melhor pra te ajudar :)

Assim esta o codigo que eu executei. Será que é alguma diferença na versão? poderia me dizer em qual versão do mysql você testou?

ALTER TABLE tb_acompanhamento  MODIFY COLUMN dt_consulta DATE DEFAULT (CURDATE());

ps: essa tabela já possui alguns valores, eu teria que realizar esse comando em uma coluna vazia? Para resolver meu problema acabei criando outra coluna:

alter table tb_acompanhamento
add column dt_data date as(date(dt_consulta))

Mas acredito que isso seja uma gambiarra e não a forma mais eficiente

Oi José,

A coluna não precisa estar vazia para alterar a tipagem dela. Quando se altera uma coluna, os dados alteram juntos. A versão que uso é a Community 8.0.18. Adicionar a coluna da forma que fez não é uma gambiarra, porém o interessante seria conseguir alterar o tipo da coluna para que não tenha conflitos ao realizar suas consultas.

Obrigado pelas respostas, minha versão é 5.7 provavelmente esse é o problema