Como obter data e hora atuais no MySQL?


148

Existe um valor ou comando como DATETIME que eu possa usar em uma consulta manual para inserir a data e hora atuais?

INSERT INTO servers (
  server_name, online_status, exchange, disk_space, network_shares
) VALUES(
  'm1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE' 'DATETIME' 
)

O valor DATETIME citado no final é onde desejo adicionar a data e hora atuais.



6
NOW (), consulte dev.mysql.com/doc/refman/5.5/en/… ... E, por favor, da próxima vez que você dedicar pelo menos algum esforço de pesquisa à sua pergunta, isso pode ser facilmente pesquisado no Google (portanto, acabei com o voto negativo) )
dirkk

Minha pergunta era mais voltada para como eu deveria usá-la na sintaxe que eu postei acima.
Samuel Nicholson

1
Veja a resposta dos franciscos para isso. Mas isso é muito, muito básico, é apenas uma chamada de função. Portanto, novamente, você deve colocar mais esforço de pesquisa no problema antes de postar uma pergunta e também pode querer ler algumas instruções no SQL.
dirkk

7
irônico. ao se esforçar para encontrar a resposta que você obtém ... esta resposta!
Zach Smith

Respostas:


266

Você pode usar NOW():

INSERT INTO servers (server_name, online_status, exchange, disk_space, network_shares, c_time)
VALUES('m1', 'ONLINE', 'exchange', 'disk_space', 'network_shares', NOW())

1
# 1054 - Coluna desconhecida 'stamp' em 'field list' - Falta alguma coisa?
Samuel Nicholson

44
Basta substituir o carimbo por qualquer que seja o nome do seu campo. Não basta copiar e colar.
francisco.preller

8
Se é uma "data" tipo de campo, você também pode usarcurdate()
Tandy

32

Use CURRENT_TIMESTAMP () ou agora ()

Gostar

INSERT INTO servers (server_name, online_status, exchange, disk_space,
network_shares,date_time) VALUES('m1','ONLINE','ONLINE','100GB','ONLINE',now() )

ou

INSERT INTO servers (server_name, online_status, exchange, disk_space,
network_shares,date_time) VALUES('m1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE'
,CURRENT_TIMESTAMP() )

Substitua date_time pelo nome da coluna que você deseja usar para inserir a hora.


25

Embora existam muitas respostas aceitas, acho que dessa maneira também é possível:

Crie sua tabela 'servidores' da seguinte maneira :

CREATE TABLE `servers`
(
      id int(11) NOT NULL PRIMARY KEY auto_increment,
      server_name varchar(45) NOT NULL,
      online_status varchar(45) NOT NULL,
      _exchange varchar(45) NOT NULL, 
      disk_space varchar(45) NOT NULL,
      network_shares varchar(45) NOT NULL,
      date_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
);

E sua instrução INSERT deve ser :

INSERT INTO servers (server_name, online_status, _exchange, disk_space, network_shares)
VALUES('m1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE');

Meu ambiente:

Laptop com Core i3 para Windows com 4 GB de RAM e fiz o exemplo acima no MySQL Workbench 6.2 (Versão 6.2.5.0 Build 397 64 Bits)



2
INSERT INTO servers (server_name, online_status, exchange, disk_space, network_shares)
VALUES('m1','ONLINE','exchange','disk_space','network_shares', NOW())

2

A resposta correta é SYSDATE () .

INSERT INTO servers (
    server_name, online_status, exchange, disk_space,
    network_shares, date_time
)
VALUES (
    'm1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE', SYSDATE()
);

Nós podemos mudar este comportamento e fazer NOW()se comportam da mesma maneira como SYSDATE()definindo sysdate_is_now argumento de linha de comando para True.

Note-se que NOW()(que tem CURRENT_TIMESTAMP()como um alias), difere SYSDATE()em uma sutil forma:

SYSDATE () retorna o horário em que é executado. Isso difere do comportamento de NOW (), que retorna um tempo constante que indica o horário em que a instrução começou a executar. (Dentro de uma função ou gatilho armazenado, NOW () retorna o horário em que a função ou instrução de gatilho começou a executar.)

Conforme indicado por Erandi , é melhor criar sua tabela com a DEFAULTcláusula para que a coluna seja preenchida automaticamente com o carimbo de data / hora quando você insere uma nova linha:

date_time datetime NOT NULL DEFAULT SYSDATE()

Se você quiser a data atual no formato de época , poderá usar UNIX_TIMESTAMP () . Por exemplo:

select now(3), sysdate(3), unix_timestamp();

renderia

+-------------------------+-------------------------+------------------+
| now(3)                  | sysdate(3)              | unix_timestamp() |
+-------------------------+-------------------------+------------------+
| 2018-11-27 01:40:08.160 | 2018-11-27 01:40:08.160 |       1543282808 |
+-------------------------+-------------------------+------------------+

Palavras-chave:


1

No design do banco de dados, recomendo o uso do Unixtime para obter consistência e desempenho de indexação / pesquisa / comparação.

UNIX_TIMESTAMP() 

Pode-se sempre converter para formatos legíveis por humanos posteriormente, internacionalizando como é individualmente mais conveniente.

FROM_ UNIXTIME (unix_timestamp, [format ])

1

Se você alterar o valor padrão CURRENT_TIMESTAMP, é mais eficiente,

ALTER TABLE servers MODIFY COLUMN network_shares datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;

0

Você pode usar não apenas now(), também current_timestamp()e localtimestamp(). O principal motivo do registro de data e hora incorreto da exibição é inserir NOW () com aspas simples ! Não funcionou para mim no MySQL Workbench, por causa deste IDE, adicione aspas simples para funções mysql e não o reconheci de uma vez)

Não use funções com aspas simples, como no MySQL Workbench. Isso não funciona.


-9
$rs = $db->Insert('register',"'$fn','$ln','$email','$pass','$city','$mo','$fil'","'f_name','l_name=','email','password','city','contact','image'");

Você deve explicar em breve sua resposta.
Sebastian Zartner

Esta resposta significa muito pouco mesmo!
Matteo Tassinari
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.