Як отримати поточну дату та час у MySQL?


148

Чи є таке значення або команда, як DATETIME, яку я можу використовувати в ручному запиті, щоб вставити поточну дату та час?

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

Цитоване значення DATETIME в кінці я хочу додати поточну дату і час.



6
NOW (), см dev.mysql.com/doc/refman/5.5/en / ... ... І , будь ласка, в наступний раз покласти по крайней мере , з деякими дослідженнями зусилля на ваше запитання, це може бути легко гуглом (тому я просто downvoted цього питання )
dirkk

Моє запитання було більше спрямоване на те, як я повинен використовувати його в синтаксисі, який я розмістив вище.
Самуель Ніколсон

1
Дивіться на це відповідь франциско. Але це дуже-дуже базово, це лише виклик функції. Тому, знову ж таки, вам слід докласти більше зусиль для дослідження, перш ніж надсилати запитання, а також, можливо, ви захочете прочитати деякі інструкції щодо SQL.
dirkk

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 - Невідомий стовпчик 'штамп' у «списку полів» - Щось мені не вистачає?
Самуель Ніколсон

44
Просто замініть штамп на будь-яку назву вашого поля, насправді. Не просто копіюйте та вставляйте.
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 з 4 Гб оперативної пам’яті, і я зробив наведений вище приклад на MySQL Workbench 6.2 (версія 6.2.5.0, збірка 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 () повертає час, коли функція або оператор запуску почала виконуватись.)

Як зазначає Еранді , найкраще створити свою таблицю із 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

У дизайні баз даних iIhighly рекомендую використовувати 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(). Основна причина неправильної часової позначки відображення - це вставлення ЗАРАЗ () з єдиними лапками ! Він не працював для мене в MySQL Workbench через те, що для цього IDE додаються єдині лапки для функцій mysql, і я не розпізнав його одразу)

Не використовуйте функції з окремими лапки, як у MySQL Workbench. Це не працює.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.