Comment obtenir la date et l'heure actuelles dans MySQL?


148

Existe-t-il une valeur ou une commande telle que DATETIME que je peux utiliser dans une requête manuelle pour insérer la date et l'heure actuelles?

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

La valeur DATETIME citée à la fin est l'endroit où je veux ajouter la date et l'heure actuelles.



6
MAINTENANT (), voir dev.mysql.com/doc/refman/5.5/en/… ... Et s'il vous plaît, la prochaine fois, mettez au moins un effort de recherche sur votre question, cela peut être facilement googlé (donc je viens de voter contre cette question )
dirkk

Ma question portait davantage sur la façon dont je devrais l'utiliser dans la syntaxe que j'ai publiée ci-dessus.
Samuel Nicholson

1
Voir la réponse des franciscos pour cela. Mais c'est très, très basique, c'est juste un appel de fonction. Par conséquent, encore une fois, vous devriez faire plus d'efforts de recherche sur le problème avant de publier une question et vous voudrez peut-être également lire des instructions sur SQL.
dirkk

7
ironique. lorsque vous faites des efforts pour trouver la réponse à laquelle vous obtenez ... cette réponse!
Zach Smith

Réponses:


266

Vous pouvez utiliser 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 - Colonne inconnue 'tampon' dans 'liste des champs' - Y a-t-il quelque chose qui me manque?
Samuel Nicholson

45
Remplacez simplement le tampon par le nom de votre champ, vraiment. Ne faites pas que copier et coller.
francisco.preller

8
S'il s'agit d'un champ de type "date", vous pouvez également utilisercurdate()
tandy

32

Utilisez CURRENT_TIMESTAMP () ou now ()

Comme

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

Remplacez date_time par le nom de colonne que vous souhaitez utiliser pour insérer l'heure.


25

Même s'il existe de nombreuses réponses acceptées, je pense que cette manière est également possible:

Créez votre table "serveurs" comme suit :

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

Et votre instruction INSERT doit être :

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

Mon environnement:

Ordinateur portable Windows Core i3 avec 4 Go de RAM, et j'ai fait l'exemple ci-dessus sur MySQL Workbench 6.2 (version 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

La bonne réponse est SYSDATE () .

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

Nous pouvons modifier ce comportement et le faire NOW()se comporter de la même manière qu'en SYSDATE()définissant l' argument de ligne de commande sysdate_is_now sur True.

Notez que NOW()(qui a CURRENT_TIMESTAMP()un alias), diffère de SYSDATE()dans une subtile façon:

SYSDATE () renvoie l'heure à laquelle il s'exécute. Cela diffère du comportement de NOW (), qui renvoie une heure constante indiquant l'heure à laquelle l'instruction a commencé à s'exécuter. (Dans une fonction ou un déclencheur stocké, NOW () renvoie l'heure à laquelle la fonction ou l'instruction de déclenchement a commencé à s'exécuter.)

Comme indiqué par Erandi , il est préférable de créer votre table avec la DEFAULTclause afin que la colonne se remplisse automatiquement avec l'horodatage lorsque vous insérez une nouvelle ligne:

date_time datetime NOT NULL DEFAULT SYSDATE()

Si vous voulez la date actuelle au format d' époque , vous pouvez utiliser UNIX_TIMESTAMP () . Par exemple:

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

céderait

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

En relation:


1

Dans la conception de bases de données, je recommande vivement d'utiliser Unixtime pour la cohérence et les performances d'indexation / recherche / comparaison.

UNIX_TIMESTAMP() 

On peut toujours se convertir à des formats lisibles par l'homme par la suite, en s'internationalisant comme cela est le plus pratique individuellement.

FROM_ UNIXTIME (unix_timestamp, [format ])

1

Si vous modifiez la valeur par défaut, CURRENT_TIMESTAMPil est plus efficace,

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

0

Vous pouvez utiliser non seulement now(), aussi current_timestamp()et localtimestamp(). La raison principale d'un horodatage d'affichage incorrect est l'insertion de NOW () avec des guillemets simples ! Cela n'a pas fonctionné pour moi dans MySQL Workbench à cause de cet IDE, ajoutez des guillemets simples pour les fonctions mysql et je ne l'ai pas reconnu à la fois)

N'utilisez pas de fonctions avec des guillemets simples comme dans MySQL Workbench. Ça ne marche pas.


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

Vous devriez expliquer brièvement votre réponse.
Sebastian Zartner

Cette réponse signifie vraiment très peu!
Matteo Tassinari
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.