Jak uzyskać aktualną datę i godzinę w MySQL?

148

Czy istnieje wartość lub polecenie, takie jak DATETIME, których mogę użyć w zapytaniu ręcznym, aby wstawić bieżącą datę i godzinę?

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

Podana na końcu wartość DATETIME to miejsce, w którym chcę dodać bieżącą datę i godzinę.

Samuel Nicholson
źródło
6
TERAZ (), zobacz dev.mysql.com/doc/refman/5.5/en/ ... I proszę, następnym razem włóż przynajmniej trochę wysiłku badawczego w swoje pytanie, można je łatwo znaleźć w Google (dlatego po prostu obniżyłem to pytanie )
dirkk
Moje pytanie było bardziej ukierunkowane na to, jak powinienem go użyć w składni, którą zamieściłem powyżej.
Samuel Nicholson
1
Zobacz odpowiedź Franciscos na to. Ale to jest bardzo, bardzo podstawowe, to tylko wywołanie funkcji. Dlatego ponownie powinieneś włożyć więcej wysiłku w zbadanie problemu przed wysłaniem pytania, a także możesz przeczytać instrukcje dotyczące SQL.
dirkk
7
ironiczny. kiedy wkładasz wysiłek w znalezienie odpowiedzi, otrzymujesz ... tę odpowiedź!
Zach Smith,

Odpowiedzi:

266

Możesz użyć 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
źródło
1
# 1054 - Nieznana kolumna „znaczek” w „liście pól” - czy czegoś mi brakuje?
Samuel Nicholson
44
Po prostu zastąp stempel jakąkolwiek nazwą twojego pola. Nie tylko kopiuj i wklejaj.
francisco.preller
8
Jeśli jest to pole typu „data”, możesz również użyćcurdate()
tandy
32

Użyj CURRENT_TIMESTAMP () lub teraz ()

Lubić

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

lub

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

Zastąp date_time nazwą kolumny, której chcesz użyć do wstawienia godziny.

Ankit Sharma
źródło
25

Chociaż istnieje wiele akceptowanych odpowiedzi, myślę, że ten sposób jest również możliwy:

Utwórz tabelę „serwerów” w następujący sposób :

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

Twoja instrukcja INSERT powinna wyglądać następująco :

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

Moje środowisko:

Laptop Core i3 z systemem Windows i 4 GB pamięci RAM, a powyższy przykład wykonałem na MySQL Workbench 6.2 (wersja 6.2.5.0, kompilacja 397 64 bity)

Erandi
źródło
5

Tak, możesz użyć CURRENT_TIMESTAMP()polecenia.

Zobacz tutaj: Funkcje daty i czasu

Alec.
źródło
2
INSERT INTO servers (server_name, online_status, exchange, disk_space, network_shares)
VALUES('m1','ONLINE','exchange','disk_space','network_shares', NOW())
Rajesh Chaurasia
źródło
2

Prawidłowa odpowiedź to SYSDATE () .

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

Możemy zmienić to zachowanie i sprawić, by NOW()zachowywał się w taki sam sposób, jak SYSDATE()ustawiając argument wiersza poleceń sysdate_is_now na True.

Zauważ, że NOW()(który ma CURRENT_TIMESTAMP()jako alias) różni się od SYSDATE()w subtelny sposób:

SYSDATE () zwraca czas wykonania. Różni się to od zachowania funkcji NOW (), która zwraca stały czas wskazujący czas rozpoczęcia wykonywania instrukcji. (W ramach zapisanej funkcji lub wyzwalacza NOW () zwraca czas, w którym funkcja lub instrukcja wyzwalająca zaczęły być wykonywane.)

Jak wskazał Erandi , najlepiej jest utworzyć tabelę z DEFAULTklauzulą, aby kolumna została automatycznie wypełniona sygnaturą czasową podczas wstawiania nowego wiersza:

date_time datetime NOT NULL DEFAULT SYSDATE()

Jeśli chcesz, aby bieżąca data była w formacie epoki , możesz użyć UNIX_TIMESTAMP () . Na przykład:

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

ustąpi

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

Związane z:

codeforester
źródło
1

W projektowaniu baz danych bardzo polecam używanie Unixtime w celu zapewnienia spójności i wydajności indeksowania / wyszukiwania / porównywania.

UNIX_TIMESTAMP() 

Zawsze można później przekonwertować na formaty czytelne dla człowieka, dokonując internacjonalizacji, ponieważ jest to najwygodniejsze dla każdego.

FROM_ UNIXTIME (unix_timestamp, [format ])
tony gil
źródło
1

Jeśli zmienisz wartość domyślną, CURRENT_TIMESTAMPjest to większa wydajność,

ALTER TABLE servers MODIFY COLUMN network_shares datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;
Ferhat KOÇER
źródło
0

Możesz używać nie tylko now(), ale także current_timestamp()i localtimestamp(). Głównym powodem nieprawidłowego wyświetlania datownika jest wstawianie NOW () z pojedynczymi cudzysłowami ! Nie działało to dla mnie w MySQL Workbench, ponieważ to IDE dodało pojedyncze cudzysłowy dla funkcji mysql i nie rozpoznałem go od razu)

Nie używaj funkcji z pojedynczymi cudzysłowami, jak w MySQL Workbench. To nie działa.

obohovyk
źródło
-9
$rs = $db->Insert('register',"'$fn','$ln','$email','$pass','$city','$mo','$fil'","'f_name','l_name=','email','password','city','contact','image'");
user3656636
źródło
Powinieneś krótko wyjaśnić swoją odpowiedź.
Sebastian Zartner
Ta odpowiedź naprawdę niewiele znaczy!
Matteo Tassinari