如何在MySQL中获取当前日期和时间?

175

在手动查询中,是否有类似DATETIME的值或命令可用于插入当前日期和时间?

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

我想在结尾处引用的DATETIME值中添加当前日期和时间。


http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html - Colandus
8
NOW(),请参见https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_now... 请下次在提问之前至少做一些研究,这个问题很容易被谷歌搜索到(因此我刚刚对这个问题进行了反对投票)。 - dirkk
我的问题更多地是针对我应该如何在我上面发布的语法中使用它。 - Samuel Nicholson
1
请参考Francisco的答案。但这非常基础,只是一个函数调用而已。因此,在发布问题之前,您应该更加努力地研究这个问题,并且您可能需要阅读一些SQL指南。 - dirkk
9
具有讽刺意味。当你努力寻找答案时,你最终得到的就是这个答案! - Zach Smith
显示剩余2条评论
10个回答

306

你可以使用 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 - 在字段列表中未知列'stamp' - 我是否遗漏了什么? - Samuel Nicholson
52
只需将“印章(stamp)”替换为您的领域名称即可。不要简单地复制粘贴。 - francisco.preller
13
如果这是一个“日期”字段类型,你也可以使用curdate() - tandy

34

请使用 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替换为您要用于插入时间的列名。


30

虽然有很多可接受的答案,但我认为这种方法也是可行的:

按照以下方式创建您的“服务器”

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 INTO servers (server_name, online_status, _exchange, disk_space, network_shares)
VALUES('m1', 'ONLINE', 'ONLINE', '100GB', 'ONLINE');

我的环境:

我使用一台配置为Core i3的Windows笔记本电脑,内存为4GB,并且我在MySQL Workbench 6.2上完成了上述示例(版本6.2.5.0 Build 397 64位)


7

5

正确答案是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()

如果你想以 epoch 格式获取当前日期,那么可以使用 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 |
+-------------------------+-------------------------+------------------+

相关:


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

1
在数据库设计中,我强烈建议使用Unix时间戳来保证一致性以及提高索引/搜索/比较性能。
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 中那样使用带有单引号的函数。 它不起作用。


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

你应该简要解释你的答案。 - Sebastian Zartner
这个答案实际上意义不大! - Matteo Tassinari

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接