转载自  MySQL sysdate()函数

MySQL SYSDATE函数介绍

下面说明了SYSDATE()函数的语法:

SYSDATE(fsp);

如果函数用于字符串上下文或YYYYMMDDHHMMSS格式,则SYSDATE()函数将返回当前日期时间,格式为“YYYY-MM-DD HH:MM:SS”的值,以防在函数用于数字上下文。

SYSDATE()函数接受一个可选参数fsp,它确定结果是否应该包含从06的小数秒精度。

请参见以下示例 -

mysql> SELECT SYSDATE();
+---------------------+
| SYSDATE()           |
+---------------------+
| 2017-08-10 20:43:16 |
+---------------------+
1 row in set

如果您传递fsp参数,则结果将包括小数秒精度,如以下示例所示:

mysql> SELECT SYSDATE(3);
+-------------------------+
| SYSDATE(3)              |
+-------------------------+
| 2017-08-10 20:43:46.985 |
+-------------------------+
1 row in set

SYSDATE 与 NOW 比较

请考虑以下示例 -

mysql> SELECT SYSDATE(), NOW();
+---------------------+---------------------+
| SYSDATE()           | NOW()               |
+---------------------+---------------------+
| 2017-08-10 20:44:38 | 2017-08-10 20:44:38 |
+---------------------+---------------------+
1 row in set

似乎SYSDATE()和NOW()函数都返回一个相同的值,它是执行语句时当前日期和时间。

然而,SYSDATE()函数实际上返回执行时的时间,而NOW()函数返回一个常量时间,该语句开始执行。

请参阅以下查询:

mysql> SELECT NOW(), SLEEP(5), NOW();
+---------------------+----------+---------------------+
| NOW()               | SLEEP(5) | NOW()               |
+---------------------+----------+---------------------+
| 2017-08-10 20:46:51 |        0 | 2017-08-10 20:46:51 |
+---------------------+----------+---------------------+
1 row in set

在这个例子中,我们使用SLEEP()函数暂停查询5秒。 在同一个语句中,NOW()函数总是返回一个常量,它是语句开始的时间。

我们将NOW()函数更改为SYSDATE()函数:

mysql>  SELECT SYSDATE(), SLEEP(5), SYSDATE();
+---------------------+----------+---------------------+
| SYSDATE()           | SLEEP(5) | SYSDATE()           |
+---------------------+----------+---------------------+
| 2017-08-10 20:48:14 |        0 | 2017-08-10 20:48:19 |
+---------------------+----------+---------------------+
1 row in set

在同一个语句中,SYSDATE()函数返回反映SYSDATE()函数执行时间的不同时间值。

因为SYSDATE()函数是非确定性的,索引不能用于评估求值引用它的表达式。

为了演示这个,我们创建一个名为tests的表,并将一些数据插入到这个表中。

CREATE TABLE tests (id INT AUTO_INCREMENT PRIMARY KEY,t DATETIME UNIQUE
);INSERT INTO tests(t)
WITH RECURSIVE times(t) AS
( SELECT now() - interval 1 YEAR tUNION ALL SELECT t + interval 1 hourFROM timesWHERE t < now()
)
SELECT t
FROM times;

请注意,我们使用递归CTE来生成时间序列。 CTE从MySQL 8.0开始才有的功能。

因为t列有唯一索引,所以下列查询应该执行得很快:

SELECT id, t
FROMtests
WHEREt >= SYSDATE() - INTERVAL 1 DAY;

但是,需要15ms才能完成。让我们使用EXPLAIN语句来看看细节。

EXPLAIN SELECT id, t
FROMtests
WHEREt >= SYSDATE() - INTERVAL 1 DAY;

执行上面分析语句,得到类似以下结果 -

原来,MySQL必须扫描表中的所有行才能获取数据。该索引无法使用。

如果在查询中将SYSDATE()更改为NOW()函数:

SELECT id, t
FROMtests
WHEREt >= NOW() - INTERVAL 1 DAY;

使用NOW()函数,索引已被用于查询数据,如下面的EXPLAIN结果所示:

EXPLAIN SELECT id, t
FROMtests
WHEREt >= NOW() - INTERVAL 1 DAY;

请注意,MySQL为您提供了--sysdate-is-now选项,可以使SYSDATE()函数的行为与NOW()函数相同。

在本教程中,您已经了解了MySQL SYSDATE()函数以及在使用MySQL之前应该考虑的一些原因。

MySQL sysdate()函数相关推荐

  1. MySQL sysdate()函数 不走索引的问题

    下面说明了SYSDATE()函数的语法: SYSDATE(fsp); SQL 如果函数用于字符串上下文或YYYYMMDDHHMMSS格式,则SYSDATE()函数将返回当前日期时间,格式为" ...

  2. mysql sysdate 格式化_MySQL函数汇总

    前言 MySQL提供了众多功能强大.方便易用的函数,使用这些函数,可以极大地提高用户对于数据库的管理效率,从而更加灵活地满足不同用户的需求.本文将MySQL的函数分类并汇总,以便以后用到的时候可以随时 ...

  3. mysql中sysdate函数转字符串_【转】MySQL:日期函数、时间函数总结(MySQL 5.X)

    转自:http://www.cnblogs.com/she27/articles/1377089.html 一.MySQL 获得当前日期时间 函数 1.1 获得当前日期+时间(date + time) ...

  4. MySQL 中用NOW()和SYSDATE()函数获取当前日期时间

    原文转载自: http://c.biancheng.net/mysql/now_sysdate.html MySql 中 NOW() 和 SYSDATE() 函数的作用相同,都是返回当前日期和时间值, ...

  5. mysql时间函数now()_MySQL中时间函数NOW()和SYSDATE()的区别

    mysql中日期函数还是比较常用的.主要有NOW()和SYSDATE()两种,虽然都表示当前时间,但使用上有一点点区别. NOW()取的是语句开始执行的时间,SYSDATE()取的是动态的实时时间. ...

  6. mysql sysdate用法_mysql中时间函数now()current_timestamp()和sysdate()比较

    转载请注明出处 https://www.cnblogs.com/majianming/p/9647786.html 在mysql中有三个时间函数用来获取当前的时间,分别是now().current_t ...

  7. Mysql日期函数使用大全

    为什么80%的码农都做不了架构师?>>>    1.1 获得当前日期+时间(date + time)函数:now() 除了 now() 函数能获得当前的日期时间外,MySQL 中还有 ...

  8. MySQL now()函数

    转载自  MySQL now()函数 MySQL NOW()函数简介 MySQL NOW()函数以"YYYY-MM-DD HH:MM:DD"或"YYYYMMDDHHMMS ...

  9. 建立学生选课表 mysql 语句_学生选课数据库SQL语句45道练习题整理及mysql常用函数(20161019)...

    学生选课数据库SQL语句45道练习题: 一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四 ...

最新文章

  1. electron 创建窗口2
  2. Python核心编程读笔 8: 文件和输入输出
  3. 在Windows系统中安装WAMP
  4. 用beyond compare解决git不能同步项目重新下载项目然后就行对比解决冲突
  5. 按照时间,每天分区;按照数字,200000一个分区
  6. 《UNIXLinux程序设计教程》一2.1 UNIX 输入输出基本概念
  7. 【Linux】kali2019安装docker
  8. [] __nw_connection
  9. 【Webcam设计】x264对OpenCV Mat的编解码
  10. matlab里直线拟合,matlab如何拟合直线
  11. HCNP数通认证考试心得体会
  12. excel删除无尽空白行_Excel 快速删除空白行
  13. 澳大利亚域名_澳大利亚域名.au注册要求
  14. 科大讯飞实现了APP用自己的声音听故事
  15. 第一期码易猿游活动圆满结束 精彩仍将继续
  16. 习惯,到底有多重要?
  17. Veil+tdm-gcc免杀360火绒瑞星
  18. 业务:客户关系管理(CRM)业务介绍
  19. 团队任务3:每日立会(2018-10-23)
  20. 自定义的可拖动滑块验证码的实现方式(SlideView)

热门文章

  1. LeetCode28 对称的二叉树-简单
  2. C++set容器-内置类型指定排序
  3. JAVA基础知识+基础代码
  4. word List 15
  5. Spring Boot 2.0新特性
  6. D. Salary Changing(二分,前缀和,贪心,瞎搞)
  7. P6282 [USACO20OPEN] Cereal S 思维
  8. Codeforces Round #712 (Div. 2) D. 3-Coloring 交互 构造
  9. P1297 [国家集训队]单选错位 期望
  10. 博弈论(基础概念+例题)