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.

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

Ankit Sharma
quelle
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.

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

Codeforester
quelle
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 ])
Tony Gil
quelle
1

Wenn Sie den Standardwert ändern, CURRENT_TIMESTAMPist dies effizienter.

ALTER TABLE servers MODIFY COLUMN network_shares datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;
Ferhat KOÇER
quelle
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.

obohovyk
quelle
-9
$rs = $db->Insert('register',"'$fn','$ln','$email','$pass','$city','$mo','$fil'","'f_name','l_name=','email','password','city','contact','image'");
user3656636
quelle
Sie sollten Ihre Antwort kurz erläutern.
Sebastian Zartner
Diese Antwort bedeutet in der Tat sehr wenig!
Matteo Tassinari