¿Cómo obtener la fecha y hora actual en MySQL?

148

¿Hay algún valor o comando como DATETIME que pueda usar en una consulta manual para insertar la fecha y hora actuales?

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

El valor DATETIME entre comillas al final es donde quiero agregar la fecha y hora actuales.

Samuel Nicholson
fuente
66
AHORA (), consulte dev.mysql.com/doc/refman/5.5/en/… ... Y, por favor, la próxima vez que haga al menos un poco de esfuerzo de investigación en su pregunta, esto se puede buscar fácilmente en Google (por lo tanto, simplemente rechacé esta pregunta )
dirkk
Mi pregunta estaba más orientada a cómo debería usarla en la sintaxis que publiqué anteriormente.
Samuel Nicholson
1
Ver respuesta franciscos para eso. Pero esto es muy, muy básico, es solo una llamada de función. Por lo tanto, una vez más, debe hacer un mayor esfuerzo de investigación en el tema antes de publicar una pregunta y también es posible que desee leer algunas instrucciones sobre SQL.
Dirkk
77
irónico. cuando te esfuerzas por encontrar la respuesta que obtienes ... ¡esta respuesta!
Zach Smith

Respuestas:

266

Puedes 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())
francisco.preller
fuente
1
# 1054 - Columna desconocida 'sello' en 'lista de campos' - ¿Hay algo que me falta?
Samuel Nicholson
45
Simplemente reemplace el sello con el nombre de su campo, en realidad. No solo copie y pegue.
francisco.preller
8
Si es un tipo de campo "fecha", también puede usarcurdate()
tandy
32

Use CURRENT_TIMESTAMP () o ahora ()

Me gusta

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

o

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

Reemplace date_time con el nombre de la columna que desea usar para insertar la hora.

Ankit Sharma
fuente
25

Aunque hay muchas respuestas aceptadas, creo que de esta manera también es posible:

Cree su tabla de 'servidores' de la siguiente manera :

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
);

Y su declaración INSERT debe ser :

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

Mi entorno:

Core i3 Windows Laptop con 4GB de RAM, e hice el ejemplo anterior en MySQL Workbench 6.2 (Versión 6.2.5.0 Build 397 64 Bits)

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

La respuesta correcta es SYSDATE () .

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

Podemos cambiar este comportamiento y hacer que se NOW()comporte de la misma manera que SYSDATE()configurando el argumento de la línea de comando sysdate_is_now en True.

Tenga en cuenta que NOW()(que tiene CURRENT_TIMESTAMP()como un alias), difiere de SYSDATE()una manera sutil :

SYSDATE () devuelve la hora a la que se ejecuta. Esto difiere del comportamiento de NOW (), que devuelve un tiempo constante que indica el momento en que la declaración comenzó a ejecutarse. (Dentro de una función almacenada o desencadenante, NOW () devuelve el momento en que la función o la declaración desencadenante comenzó a ejecutarse).

Como lo indicó Erandi , es mejor crear su tabla con la DEFAULTcláusula para que la columna se rellene automáticamente con la marca de tiempo cuando inserte una nueva fila:

date_time datetime NOT NULL DEFAULT SYSDATE()

Si desea la fecha actual en formato de época , puede usar UNIX_TIMESTAMP () . Por ejemplo:

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

cedería

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

Relacionado:

codeforester
fuente
1

En el diseño de bases de datos, recomiendo utilizar Unixtime para lograr consistencia e indexación / búsqueda / rendimiento de comparación.

UNIX_TIMESTAMP() 

Siempre se puede convertir a formatos legibles para humanos después, internacionalizándose como sea más conveniente individualmente.

FROM_ UNIXTIME (unix_timestamp, [format ])
Tony Gil
fuente
1

Si realiza un cambio en el valor predeterminado CURRENT_TIMESTAMP, es más eficiente,

ALTER TABLE servers MODIFY COLUMN network_shares datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;
Ferhat KOÇER
fuente
0

Puede usar no solo now(), también current_timestamp()y localtimestamp(). ¡La razón principal de la marca de tiempo de visualización incorrecta es insertar NOW () con comillas simples ! No funcionó para mí en MySQL Workbench debido a este IDE agregué comillas simples para las funciones de mysql y no lo reconocí de inmediato)

No use funciones con comillas simples como en MySQL Workbench. No funciona

obohovyk
fuente
-9
$rs = $db->Insert('register',"'$fn','$ln','$email','$pass','$city','$mo','$fil'","'f_name','l_name=','email','password','city','contact','image'");
user3656636
fuente
En breve deberías explicar tu respuesta.
Sebastian Zartner
¡Esta respuesta significa muy poco!
Matteo Tassinari