Как узнать текущую дату и время в 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())

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 бита)




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 |
+-------------------------+-------------------------+------------------+

Связанный:


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;

0

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

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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.