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ę.



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

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.


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)



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

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:


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

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;

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.


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

Powinieneś krótko wyjaśnić swoją odpowiedź.
Sebastian Zartner

Ta odpowiedź naprawdę niewiele znaczy!
Matteo Tassinari
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.