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.

Samuel Nicholson
la source
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())
francisco.preller
la source
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.

Ankit Sharma
la source
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)

Erandi
la source
2
INSERT INTO servers (server_name, online_status, exchange, disk_space, network_shares)
VALUES('m1','ONLINE','exchange','disk_space','network_shares', NOW())
Rajesh Chaurasia
la source
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:

codeforester
la source
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 ])
Tony Gil
la source
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;
Ferhat KOÇER
la source
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.

obohovyk
la source
-9
$rs = $db->Insert('register',"'$fn','$ln','$email','$pass','$city','$mo','$fil'","'f_name','l_name=','email','password','city','contact','image'");
user3656636
la source
Vous devriez expliquer brièvement votre réponse.
Sebastian Zartner
Cette réponse signifie vraiment très peu!
Matteo Tassinari