如何在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/… ...而且,下次,请至少对您的问题进行一些研究,这很容易被谷歌搜索(因此,我对该问题不屑一顾)
dirkk

我的问题更针对于如何在上面发布的语法中使用它。
塞缪尔·尼科尔森

1
看到弗朗西斯科的答案。但这是非常非常基础的,它只是一个函数调用。因此,再次,在发布问题之前,您应该对问题进行更多的研究,并且您可能还想阅读一些有关SQL的说明。
dirkk

7
具有讽刺意味的。当努力寻找答案时,您会得到...这个答案!
扎克·史密斯

Answers:


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

喜欢

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

我的环境:

具有4GB RAM的Core i3 Windows笔记本电脑,我在MySQL Workbench 6.2(版本6.2.5.0 Build 397 64位)上进行了上述示例



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

有关:


1

在数据库设计中,iI强烈建议使用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中使用带单引号的函数。没用


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.