Как узнать текущую дату и время в MySQL?

148

Есть ли значение или команда, например DATETIME, которые я могу использовать в ручном запросе для вставки текущей даты и времени?

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

Приведенное в конце значение DATETIME - это то место, где я хочу добавить текущую дату и время.

Сэмюэл Николсон
источник
6
СЕЙЧАС (), см. Dev.mysql.com/doc/refman/5.5/en/… ... И, пожалуйста, в следующий раз, по крайней мере, приложите хоть какие-то усилия по исследованию вашего вопроса, это можно легко найти (поэтому я просто отклонил этот вопрос )
dirkk
Мой вопрос был больше нацелен на то, как я должен использовать его в синтаксисе, который я разместил выше.
Сэмюэль Николсон
1
Смотри ответ Франциско за это. Но это очень, очень просто, это просто вызов функции. Поэтому, опять же, вы должны приложить больше усилий для исследования проблемы, прежде чем публиковать вопрос, а также вы можете прочитать некоторые инструкции по SQL.
Диркк
7
иронично. прилагая усилия в поиске ответа, вы получаете ... этот ответ!
Зак Смит

Ответы:

266

Вы можете использовать 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
источник
1
# 1054 - Неизвестный столбец «штамп» в «списке полей» - Что-то мне не хватает?
Сэмюэль Николсон
45
Просто замените штамп на имя вашего поля, правда. НЕ просто скопируйте и вставьте.
francisco.preller
8
Если это тип поля «дата», вы также можете использоватьcurdate()
tandy
32

Используйте CURRENT_TIMESTAMP () или сейчас ()

подобно

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

или

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

Замените date_time именем столбца, который вы хотите использовать для вставки времени.

Анкит Шарма
источник
25

Несмотря на то, что есть много принятых ответов, я думаю, что этот способ также возможен:

Создайте свою таблицу серверов следующим образом :

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

И ваше заявление INSERT должно быть :

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

Моя среда:

Core i3 Windows Laptop с 4 ГБ ОЗУ, и я сделал приведенный выше пример на MySQL Workbench 6.2 (Версия 6.2.5.0 Build 397, 64 бита)

Erandi
источник
2
INSERT INTO servers (server_name, online_status, exchange, disk_space, network_shares)
VALUES('m1','ONLINE','exchange','disk_space','network_shares', NOW())
Раджеш Чаурасия
источник
2

Правильный ответ SYSDATE () .

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

Мы можем изменить это поведение и заставить NOW()себя вести себя так же, как SYSDATE()установив аргумент командной строки sysdate_is_now в True.

Следует отметить , что NOW()(который имеет в CURRENT_TIMESTAMP()качестве псевдонима), отличается от SYSDATE()в тонком образом:

SYSDATE () возвращает время выполнения. Это отличается от поведения для NOW (), которая возвращает постоянное время, которое указывает время, когда оператор начал выполняться. (Внутри сохраненной функции или триггера NOW () возвращает время, когда функция или оператор запуска начали выполняться.)

Как указывает Erandi , лучше создать таблицу с DEFAULTпредложением, чтобы при вставке новой строки столбец автоматически заполнялся меткой времени:

date_time datetime NOT NULL DEFAULT SYSDATE()

Если вы хотите текущую дату в формате эпох , тогда вы можете использовать UNIX_TIMESTAMP () . Например:

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

даст

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

Связанный:

codeforester
источник
1

В проектировании баз данных я настоятельно рекомендую использовать Unixtime для согласованности и индексации / поиска / сравнения производительности.

UNIX_TIMESTAMP() 

После этого всегда можно конвертировать в удобочитаемые форматы, интернационализируя их, как вам удобнее.

FROM_ UNIXTIME (unix_timestamp, [format ])
Тони Гил
источник
1

Если вы сделаете изменение значения по умолчанию на CURRENT_TIMESTAMPэто более эффективным,

ALTER TABLE servers MODIFY COLUMN network_shares datetime NOT NULL DEFAULT CURRENT_TIMESTAMP;
Ferhat KOÇER
источник
0

Вы можете использовать не только now(), также current_timestamp()и localtimestamp(). Основной причиной неправильной отметки времени отображения является вставка NOW () с одинарными кавычками ! Это не сработало для меня в MySQL Workbench из-за этой IDE, добавляющей одинарные кавычки для функций mysql, и я не узнал это сразу)

Не используйте функции с одинарными кавычками, как в MySQL Workbench. Не работает

obohovyk
источник
-9
$rs = $db->Insert('register',"'$fn','$ln','$email','$pass','$city','$mo','$fil'","'f_name','l_name=','email','password','city','contact','image'");
user3656636
источник
Вы должны коротко объяснить свой ответ.
Себастьян Зартнер
Этот ответ очень мало значит!
Маттео Тассинари