Come ottenere la data e l'ora correnti in MySQL?


148

Esiste un valore o un comando come DATETIME che posso utilizzare in una query manuale per inserire la data e l'ora correnti?

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

Il valore DATETIME citato alla fine è dove voglio aggiungere la data e l'ora correnti.



6
ORA (), vedi dev.mysql.com/doc/refman/5.5/en/… ... E per favore, la prossima volta metti almeno qualche sforzo di ricerca nella tua domanda, questo può essere facilmente cercato su Google (quindi ho appena votato verso il basso questa domanda )
dirkk,

La mia domanda era più rivolta a come dovrei usarla nella sintassi che ho pubblicato sopra.
Samuel Nicholson,

1
Vedi la risposta di Francesco per questo. Ma questo è molto, molto semplice, è solo una chiamata di funzione. Pertanto, ancora una volta, dovresti dedicare maggiori sforzi di ricerca al problema prima di pubblicare una domanda e potresti anche voler leggere alcune istruzioni su SQL.
dirkk,

7
ironico. quando ti sforzi di trovare la risposta, arrivi a ... questa risposta!
Zach Smith,

Risposte:


266

Puoi usare 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 - Colonna sconosciuta 'stamp' in 'field list' - C'è qualcosa che mi manca?
Samuel Nicholson,

45
Sostituisci semplicemente il timbro con qualunque sia il nome del tuo campo, davvero. NON solo copiare e incollare.
francisco.preller,

8
Se è un tipo di campo "data", puoi anche usarecurdate()
tandy

32

Utilizza CURRENT_TIMESTAMP () o ora ()

Piace

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

Sostituisci date_time con il nome della colonna che desideri utilizzare per inserire l'ora.


25

Anche se ci sono molte risposte accettate, penso che anche in questo modo sia possibile:

Crea la tua tabella 'server' come segue :

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 la tua dichiarazione INSERT dovrebbe essere :

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

Il mio ambiente:

Core i3 laptop Windows con 4 GB di RAM e ho fatto l'esempio sopra su MySQL Workbench 6.2 (versione 6.2.5.0 Build 397 64 bit)



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

2

La risposta corretta è SYSDATE () .

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

Possiamo cambiare questo comportamento e farci NOW()comportare allo stesso modo SYSDATE()impostando l' argomento della riga di comando sysdate_is_now su True.

Nota che NOW()(che ha CURRENT_TIMESTAMP()come alias), differisce SYSDATE()in modo sottile :

SYSDATE () restituisce l'ora in cui viene eseguita. Ciò differisce dal comportamento di NOW (), che restituisce un tempo costante che indica l'ora in cui è iniziata l'esecuzione dell'istruzione. (All'interno di una funzione o trigger memorizzato, NOW () restituisce il momento in cui la funzione o l'istruzione di attivazione ha iniziato a essere eseguita.)

Come indicato da Erandi , è meglio creare la tabella con la DEFAULTclausola in modo che la colonna venga popolata automaticamente con il timestamp quando si inserisce una nuova riga:

date_time datetime NOT NULL DEFAULT SYSDATE()

Se si desidera la data corrente in formato epoca , è possibile utilizzare UNIX_TIMESTAMP () . Per esempio:

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

cederebbe

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

Relazionato:


1

Nella progettazione del database, consiglio vivamente di utilizzare Unixtime per coerenza e prestazioni di indicizzazione / ricerca / confronto.

UNIX_TIMESTAMP() 

In seguito si può sempre convertire in formati leggibili dall'uomo , internazionalizzando come è più conveniente individualmente.

FROM_ UNIXTIME (unix_timestamp, [format ])

1

Se si modifica il valore predefinito in CURRENT_TIMESTAMPesso è più efficiente,

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

0

Puoi usare non solo now(), anche current_timestamp()e localtimestamp(). Il motivo principale di un timestamp di visualizzazione errato è l'inserimento di NOW () con virgolette singole ! Non ha funzionato per me in MySQL Workbench a causa di questo IDE aggiungere virgolette singole per le funzioni mysql e non l'ho riconosciuto subito)

Non utilizzare le funzioni con virgolette singole come in MySQL Workbench. Non funziona


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

Dovresti spiegare brevemente la tua risposta.
Sebastian Zartner,

Questa risposta significa davvero molto poco!
Matteo Tassinari,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.