MySQL sysdate()函数的具体使用

 更新时间:2023年07月17日 11:19:20   作者:yiibai  
本文主要介绍了MySQL sysdate()函数的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

在本教程中,您将了解MySQL SYSDATE()函数及其注意事项。

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

SYSDATE(fsp);

如果函数用于字符串上下文或YYYYMMDDHHMMSS格式,则SYSDATE()函数将返回当前日期时间,格式为“YYYY-MM-DD HH:MM:SS”的值,以防在函数用于数字上下文。
SYSDATE()函数接受一个可选参数fsp,它确定结果是否应该包含从0到6的小数秒精度。

请参见以下示例 - 

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 t
        UNION ALL 
    SELECT t + interval 1 hour
    FROM times
    WHERE t < now() 
)
SELECT t
FROM times;

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

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

SELECT 
    id, 
    t
FROM
    tests
WHERE
    t >= SYSDATE() - INTERVAL 1 DAY;

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

EXPLAIN SELECT 
    id, t
FROM
    tests
WHERE
    t >= SYSDATE() - INTERVAL 1 DAY;

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

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

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

SELECT 
    id, 
    t
FROM
    tests
WHERE
    t >= NOW() - INTERVAL 1 DAY;

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

EXPLAIN SELECT 
    id, 
    t
FROM
    tests
WHERE
    t >= NOW() - INTERVAL 1 DAY;

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

MySQL Sysdate函数的注意事项

1、MySQL Sysdate函数不支持传递参数。

2、MySQL Sysdate函数在不同的操作系统上返回的时间戳可能会有所不同。

3、MySQL Sysdate函数返回的日期和时间戳基于系统时钟。

总结

到此这篇关于MySQL sysdate()函数的具体使用的文章就介绍到这了,更多相关MySQL sysdate内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql 根据一个表数据更新另一个表的某些字段(sql语句)

    Mysql 根据一个表数据更新另一个表的某些字段(sql语句)

    这篇文章主要介绍了Mysql 根据一个表数据更新另一个表的某些字段,本文给出了sql语句,感兴趣的朋友可以跟随脚本之家小编一起学习吧
    2018-05-05
  • mysql服务1067错误多种解决方案分享

    mysql服务1067错误多种解决方案分享

    今天我的mysql服务器突然出来了1067错误提示,无法正常启动了,我今天从网上找寻了大量的解决mysql服务1067错误的办法,有需要的朋友可以看看
    2012-03-03
  • MySQL9.0.1安装教程的实现示例

    MySQL9.0.1安装教程的实现示例

    本文主要介绍了MySQL软件的下载、解压、环境变量配置、初始化及启动、登录与密码设置等步骤,详细说明了每一步的操作方法,感兴趣的可以了解一下
    2024-10-10
  • C#列出局域网中可用SQL Server服务器

    C#列出局域网中可用SQL Server服务器

    SQLDMO(SQL Distributed Management Objects,SQL分布式管理对象)封装了Microsoft SQL Server数据库中的对象。SQLDMO是Microsoft SQL Server中企业管理器所使用的应用程序接口,所以它可以执行很多功能,其中当然也包括对数据库的备份和恢复。
    2008-04-04
  • MySQL创建高性能索引的全步骤

    MySQL创建高性能索引的全步骤

    这篇文章主要给大家介绍了关于MySQL创建高性能索引的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-05-05
  • mysql 导入导出数据库以及函数、存储过程的介绍

    mysql 导入导出数据库以及函数、存储过程的介绍

    本篇文章是对mysql中的导入导出数据库命令以及函数、存储过程进行了详细的分析介绍,需要的朋友参考下
    2013-07-07
  • 使用mysqldump实现mysql备份

    使用mysqldump实现mysql备份

    mysqldump客户端可用来转储数据库或搜集数据库进行备份或将数据转移到另一个SQL服务器(不一定是一个MySQL服务器)。今天我们就来详细探讨下mysqldump的使用方法
    2016-11-11
  • SQL查询至少连续七天下单的用户

    SQL查询至少连续七天下单的用户

    这篇文章介绍了SQL查询至少连续七天下单用户的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-01-01
  • MySQL使用GROUP BY使用技巧和注意事项总结

    MySQL使用GROUP BY使用技巧和注意事项总结

    GROUP BY 子句是 在MySQL 中用于将查询结果按照指定的列或表达式进行分组的关键字,它通常与聚合函数一起使用,能够对每个分组进行统计或计算,本文给大家总结了MySQL使用GROUP BY使用技巧和注意事项,需要的朋友可以参考下
    2024-05-05
  • MYSQL 优化常用方法

    MYSQL 优化常用方法

    如何优化你的MYSQL呢?请看下面:(不错的优化方案)
    2009-07-07

最新评论