Wie erhalte ich das aktuelle Datum und die aktuelle Uhrzeit in MySQL?


148

Gibt es einen Wert oder Befehl wie DATETIME, den ich in einer manuellen Abfrage verwenden kann, um das aktuelle Datum und die aktuelle Uhrzeit einzufügen?

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

Der angegebene DATETIME-Wert am Ende ist der Ort, an dem ich das aktuelle Datum und die aktuelle Uhrzeit hinzufügen möchte.



6
JETZT (), siehe dev.mysql.com/doc/refman/5.5/en/… ... Und bitte, wenn Sie das nächste Mal zumindest einige Forschungsanstrengungen in Ihre Frage investieren, kann dies leicht gegoogelt werden (daher habe ich diese Frage nur abgelehnt )
Dirkk

Meine Frage zielte eher darauf ab, wie ich sie in der oben veröffentlichten Syntax verwenden sollte.
Samuel Nicholson

1
Siehe Franciscos Antwort darauf. Aber das ist sehr, sehr einfach, es ist nur ein Funktionsaufruf. Daher sollten Sie das Problem erneut untersuchen, bevor Sie eine Frage stellen. Außerdem möchten Sie möglicherweise einige Anweisungen zu SQL lesen.
Dirkk

7
ironisch. Wenn Sie sich bemühen, die Antwort zu finden, erhalten Sie ... diese Antwort!
Zach Smith

Antworten:


266

Sie können verwenden 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 - Unbekannte Spalte 'Stempel' in 'Feldliste' - Fehlt mir etwas?
Samuel Nicholson

44
Ersetzen Sie einfach den Stempel durch Ihren Feldnamen. Kopieren und fügen Sie nicht nur ein.
francisco.preller

8
Wenn es sich um einen curdate()
Feldtyp

32

Verwenden Sie CURRENT_TIMESTAMP () oder now ()

Mögen

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

oder

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

Ersetzen Sie date_time durch den Spaltennamen, mit dem Sie die Uhrzeit einfügen möchten.


25

Obwohl es viele akzeptierte Antworten gibt, denke ich, dass dieser Weg auch möglich ist:

Erstellen Sie Ihre 'Server'- Tabelle wie folgt :

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

Und Ihre INSERT- Anweisung sollte lauten :

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

Meine Umgebung:

Core i3 Windows Laptop mit 4 GB RAM, und ich habe das obige Beispiel auf MySQL Workbench 6.2 (Version 6.2.5.0 Build 397 64 Bits) ausgeführt.



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

2

Die richtige Antwort lautet SYSDATE () .

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

Wir können dieses Verhalten ändern und NOW()verhalten, SYSDATE()indem wir das Befehlszeilenargument sysdate_is_now auf setzen True.

Beachten Sie, dass NOW()(was CURRENT_TIMESTAMP()als Alias ​​gilt) sich SYSDATE()auf subtile Weise von unterscheidet:

SYSDATE () gibt den Zeitpunkt zurück, zu dem es ausgeführt wird. Dies unterscheidet sich vom Verhalten für NOW (), das eine konstante Zeit zurückgibt, die den Zeitpunkt angibt, zu dem die Ausführung der Anweisung begonnen hat. (Innerhalb einer gespeicherten Funktion oder eines gespeicherten Triggers gibt NOW () den Zeitpunkt zurück, zu dem die Ausführung der Funktion oder der auslösenden Anweisung begonnen hat.)

Wie von Erandi angegeben , ist es am besten, Ihre Tabelle mit der DEFAULTKlausel zu erstellen , damit die Spalte beim Einfügen einer neuen Zeile automatisch mit dem Zeitstempel gefüllt wird :

date_time datetime NOT NULL DEFAULT SYSDATE()

Wenn Sie das aktuelle Datum im Epochenformat haben möchten , können Sie UNIX_TIMESTAMP () verwenden . Beispielsweise:

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

ergäbe

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

Verbunden:


1

Im Datenbankdesign wird die Verwendung von Unixtime aus Gründen der Konsistenz und der Indizierungs- / Such- / Vergleichsleistung dringend empfohlen.

UNIX_TIMESTAMP() 

Man kann danach immer in von Menschen lesbare Formate konvertieren und internationalisieren, wie es individuell am bequemsten ist.

FROM_ UNIXTIME (unix_timestamp, [format ])

1

Wenn Sie den Standardwert ändern, CURRENT_TIMESTAMPist dies effizienter.

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

0

Sie können nicht nur now()auch current_timestamp()und verwenden localtimestamp(). Der Hauptgrund für den falschen Zeitstempel der Anzeige ist das Einfügen von NOW () in einfache Anführungszeichen ! In MySQL Workbench hat es wegen dieser IDE nicht funktioniert. Fügen Sie einfache Anführungszeichen für MySQL-Funktionen hinzu, und ich habe es nicht sofort erkannt.

Verwenden Sie keine Funktionen mit einfachen Anführungszeichen wie in MySQL Workbench. Es funktioniert nicht.


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

Sie sollten Ihre Antwort kurz erläutern.
Sebastian Zartner

Diese Antwort bedeutet in der Tat sehr wenig!
Matteo Tassinari
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.