`
baggioback
  • 浏览: 70596 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

mysql时间函数

 
阅读更多

1. NOW、CURRENT_TIMESTAMP和SYSDATE

这些函数都能返回当前的系统时间,它们之间有区别吗?先来看个例子。

mysql> SELECT NOW(),CURRENT_TIMESTAMP(),SYSDATE()\G;
*************************** 1. row ***************************
NOW(): 2011-02-04 20:35:04
CURRENT_TIMESTAMP(): 2011-02-04 20:35:04
SYSDATE(): 2011-02-04 20:35:04

从上面的例子看来,3个函数都是返回当前的系统时间,再来看下面这个例子:

mysql>SELECT
->     NOW(),
->     CURRENT_TIMESTAMP(),
->     SYSDATE(),
->     SLEEP(2),
->     NOW(),
->     CURRENT_TIMESTAMP(),
->     SYSDATE()\G
*************************** 1. row ***************************
NOW(): 2011-11-29 21:04:49
CURRENT_TIMESTAMP(): 2011-11-29 21:04:49
SYSDATE(): 2011-11-29 21:04:49
SLEEP(2): 0
NOW(): 2011-11-29 21:04:49
CURRENT_TIMESTAMP(): 2011-11-29 21:04:49
SYSDATE(): 2011-11-29 21:04:51
1 row in set (2.00 sec)

在上面这个例子中人为地加入了SLEEP函数,让其等待2秒,这时可以发现SYSDATE返回的时间和NOW及CURRENT_TIMESTAMP是不同的,SYSDATE函数慢了2秒。究其原因是这3个函数有略微区别:

CURRENT_TIMESTAMP是NOW的同义词,也就是说两者是相同的。

SYSDATE函数返回的是执行到当前函数时的时间,而NOW返回的是执行SQL语句时的时间。

因此在上面的例子中,两次执行SYSDATE函数返回不同的时间是因为第二次调用执行该函数时等待了前面SLEEP函数2秒。而对于NOW函数,不管是在SLEEP函数之前还是之后执行,返回的都是执行这条SQL语句时的时间。

2.时间加减函数

先来看一个例子。

mysql> SELECT NOW(),NOW()+0\G;
*************************** 1. row ***************************
NOW(): 2011-02-04 20:46:33
NOW()+0: 20110204204633.000000
1 row in set (0.00 sec)

可以看到,NOW()函数可以返回时间,也可以返回一个数字,就看用户如何使用。如果相对当前时间进行增加或减少,并不能直接加上或减去一个数字,而需要使用特定的函数,如DATE_ADD或DATE_SUB,前者表示增加,后者表示减少。其具体的使用方法有DATE_ADD(date,INTERVAL expr unit)和 DATE_SUB(date,INTERVAL expr unit),示例如下:

mysql> SELECT NOW() AS now,
DATE_ADD(now(),INTERVAL 1 DAY) AS tomorrow,
DATE_SUB(now(),INTERVAL 1 DAY) AS yesterday\G;
*************************** 1. row ***************************
now: 2011-02-04 20:53:25
tomorrow: 2011-02-05 20:53:25
yesterday: 2011-02-03 20:53:25
1 row in set (0.00 sec)

其中expr值可以是正值也可以是负值,因此可以使用DATE_ADD函数来完成DATE_SUB函数的工作,例如:

mysql> SELECT NOW() AS now,
DATE_ADD(NOW(),INTERVAL 1 DAY) AS tomorrow,
DATE_ADD(NOW(),INTERVAL -1 DAY) AS yesterday\G;
*************************** 1. row ***************************
now: 2011-02-04 20:55:40
tomorrow: 2011-02-05 20:55:40
yesterday: 2011-02-03 20:55:40
1 row in set (0.00 sec)

还有一个问题,如果是闰月,那么DATE_ADD函数怎么处理呢?MySQL的默认行为是这样的:如果目标年份是闰月,那么返回的日期为2月29日;如果不是闰月,那么返回日期是2月28日。示例如下:

mysql> SELECT DATE_ADD(’2000-2-29′,INTERVAL 4 YEAR) AS year;
+————+
| year        |
+————+
| 2004-02-29 |
+————+
1 row in set (0.00 sec)

 

mysql> SELECT DATE_ADD(’2000-2-29′,INTERVAL 1 YEAR) AS year;
+————+
| year        |
+————+
| 2001-02-28 |
+————+
1 row in set (0.00 sec)

在上面的例子中使用了DAY和YEAR数据类型,其实也可以使用MICROSECOND、SECOND、MINUTE、HOUR、WEEK、MONTH等类型,例如:

mysql> SELECT NOW() AS now,
DATE_ADD(NOW(), INTERVAL 1 HOUR) AS next time\G;
*************************** 1. row ***************************
now: 2011-02-04 21:00:15
next time: 2011-02-04 22:00:15
1 row in set (0.00 sec)

 3. DATE_FORMAT函数

这个函数本身没有什么需要探讨的地方,其作用只是按照用户的需求格式化打印出日期,例如:

mysql> SELECT DATE_FORMAT(NOW(),’%Y%m%d’) AS datetime;
+———-+
| datetime |
+———-+
| 20110204 |
+———-+
1 row in set (0.00 sec)

但是开发人员往往会错误地使用这个函数,导致非常严重的后果。例如在需要查询某一天的数据时,有些开发人员会写如下的语句:

SELECT * FROM table WHERE DATE_FORMAT(date,’%Y%m%d’)=’xxxx-xx-xx’;

一般来说表中都会有一个对日期类型的索引,如果使用上述的语句,优化器绝对不会使用索引,也不可能通过索引来查询数据,因此上述查询的执行效率可能非常低。

分享到:
评论

相关推荐

    mysql 时间函数

    mysql 时间函数 mysql 时间函数是 mysql 中用于处理日期和时间的函数,下面将详细介绍这些函数: 1. 获得当前日期时间函数: mysql 中有多种函数可以获得当前的日期和时间,包括 now()、current_timestamp()、...

    Mysql时间函数

    比较详细的mysql时间函数,预防备用。

    mysql时间函数用法集合

    网上找到的mysql时间函数用法集合,和大家分享

    mysql 时间函数用法

    很详实的mysql 时间函数的用法,花了很多时间搜集到的好资料,我自己编程时经常查看

    mysql中取系统当前时间,当前日期方便查询判定的代码

    获取当前时间的MySql时间函数处理MySql时间日期的函数有很多,下面为您介绍的就是用于获取当前时间的MySql时间函数,如果您对此感兴趣的话,不妨一看下面为您介绍的MySql时间函数用于获取当前时间,该MySql时间函数...

    MySQL时间函数.doc

    MySQL时间函数是数据库操作中非常重要的组成部分,它们用于处理和计算日期、时间和日期时间值。在MySQL中,日期和时间类型包括DATE、TIME、DATETIME和TIMESTAMP等,每种类型都有其特定的值范围和格式。在7.3.6章节中...

    mysql+php中文乱码问题及mysql时间函数.rar

    二、MySQL时间函数 1. `NOW()`: 返回当前日期和时间,格式为'YYYY-MM-DD HH:MM:SS'。 2. `CURDATE()`: 返回当前日期,格式为'YYYY-MM-DD'。 3. `CURTIME()`: 返回当前时间,格式为'HH:MM:SS'。 4. `DATE()`: ...

    mysql的日期和时间函数.rar

    日期和时间函数是MySQL中的重要组成部分,它们允许我们进行日期和时间的计算、格式化以及各种操作,极大地增强了数据库查询和数据分析的能力。在这个“mysql的日期和时间函数”教程中,我们将深入探讨这些关键功能。...

    MYSQL 日期函数大全

    MYSQL 日期函数大全,供大家一起共同分享学习。

    Mysql函数手册.rar_MySQL函数手册_VZI_mysql 函数手册

    3. 日期和时间函数:如NOW()获取当前日期和时间,DATE_FORMAT()用于格式化日期和时间,DATE_ADD()和DATE_SUB()可以对日期进行加减操作。 4. 转换函数:如CAST()和CONVERT()用于在不同数据类型间转换,以及INET_ATON...

    mysql+php中文乱码问题及mysql时间函数借鉴.pdf

    关于MySQL的时间函数,`DATE_FORMAT()`是一个非常实用的函数,可以按照指定的格式格式化日期和时间。例如,以下是一些常见的格式修饰符: - `%Y`:四位数字表示的年份 - `%m`:两位数字表示的月份 - `%d`:两位数字...

    mysql+php中文乱码问题及mysql时间函数.pdf

    除了中文乱码问题,MySQL的时间函数也是处理日期和时间数据的关键。`DATE_FORMAT()`函数允许你根据特定格式显示日期和时间,例如: - `%M`表示完整的月份名称,如January。 - `%W`代表星期名称,如Sunday。 - `%Y`...

    mysql+php中文乱码问题及mysql时间函数.docx

    MySQL提供了丰富的日期和时间函数,其中`DATE_FORMAT()`函数用于根据指定的`format`格式化日期值。以下是一些常用的格式修饰符: - `%M`:完整月份名称(January...December) - `%W`:完整星期名称(Sunday......

    mysql日期函数时间函数及加减运算

    "MySQL 日期函数和时间函数及加减运算" MySQL 日期函数和时间函数是 MySQL 中非常重要的函数,用于处理日期和时间数据类型。这些函数可以帮助开发者快速获得当前日期和时间、执行日期和时间相关的操作。 获得当前...

    MySQL常用函数大全

    ### MySQL常用函数详解 ...以上总结涵盖了MySQL中常用的数学、组合、聚合、字符串以及日期时间函数。这些函数广泛应用于各种场景,例如数据处理、报表生成等。熟练掌握这些函数有助于提高SQL查询效率及结果准确性。

Global site tag (gtag.js) - Google Analytics