`
shinepaopao
  • 浏览: 145292 次
社区版块
存档分类
最新评论

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()+020110204204633.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 DAYAS tomorrow,
       DATE_SUB(
now(),INTERVAL 1 DAYAS yesterday\G;
*************************** 1. row ***************************
     
now2011-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 DAYAS tomorrow,
       DATE_ADD(
NOW(),INTERVAL -1 DAYAS yesterday\G;
*************************** 1. row ***************************
      
now2011-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 HOURAS next time\G;
*************************** 1. row ***************************
     
now2011-02-04 21:00:15
next time2011-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';

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

5
1
分享到:
评论

相关推荐

    mysql的日期和时间函数.rar

    通过深入学习和实践这些MySQL日期和时间函数,开发者可以更有效地管理数据库中的日期和时间数据,创建出更加精确和复杂的查询语句。这个教程文档“mysql的日期和时间函数.doc”应该包含了详细解释和实例,帮助读者更...

    MySQL时间日期相关函数

    MySQL时间日期相关函数是数据库操作中的重要组成部分,用于处理与日期和时间相关的数据。在MySQL中,这些函数提供了丰富的功能,包括获取当前日期和时间、格式化日期、时间间隔计算以及进行日期时间的比较等。以下是...

    MYSQL 日期函数大全

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

    mysql时间日期函数

    在MySQL数据库中,时间日期函数是处理与时间相关的数据时不可或缺的一部分。这些函数提供了丰富的功能,可以帮助用户在查询、更新或插入数据时精确地操作日期和时间。下面将详细介绍几个核心的时间日期函数及其应用...

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

    获得当前日期时间函数 MySQL 中有多种方式可以获得当前日期和时间,包括 now()、current_timestamp()、localtime()、localtimestamp() 等函数。其中,now() 函数是最常用的函数,用于获取当前的日期和时间。当前...

    MySQL日期时间函数大全

    在 MySQL 中,日期时间函数是非常重要的一部分,它们可以帮助我们对日期和时间进行各种操作。下面我们将对 MySQL 中的日期时间函数进行详细的讲解。 DAYOFWEEK(date) `DAYOFWEEK` 函数返回日期 `date` 是星期几,...

    mysql 日期函数相关操作

    在MySQL中,日期和时间函数提供了丰富的功能,用于处理日期和时间数据,这对于数据库管理和查询极为关键。以下是对几个常用日期函数的详细解析: ### 1. `TO_DAYS(date)` `TO_DAYS()`函数将一个日期转换为从“0000...

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

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

    MySQL内置函数中的日期和时间函数详解.pdf

    在实际应用中,这些日期和时间函数能够帮助开发者高效地处理与日期时间相关的问题,例如,在数据库中查询数据时,可以根据时间戳范围来筛选出符合要求的记录,或者在进行数据转换时,可以轻松地将时间戳转换为不同的...

    Mysql日期和时间函数大全[归类].pdf

    Mysql日期和时间函数大全 Mysql日期和时间函数大全是Mysql中日期和时间处理函数的集合,它们用于处理日期和...Mysql日期和时间函数大全为开发者提供了强大的日期和时间处理能力,能够满足各种日期和时间相关的需求。

    mysql的日期和时间函数.pdf

    MySQL 日期和时间函数详解 MySQL 日期和时间函数是 MySQL 中的重要组件之一,它们提供了大量的日期...MySQL 日期和时间函数为开发者提供了方便的日期和时间处理功能,可以帮助开发者更好地处理日期和时间相关的任务。

    mysql的日期和时间函数

    mysql的日期和时间函数 这里是一个使用日期函数的例子。下面的查询选择所有 date_col 值在最后 30 天内的记录。 mysql> SELECT something FROM tbl_name WHERE TO_DAYS(NOW()) - TO_DAYS(date_col) ...

    mysql 时间函数

    1. 获得当前日期时间函数: mysql 中有多种函数可以获得当前的日期和时间,包括 now()、current_timestamp()、localtime()、localtimestamp() 等。这些函数都可以获得当前的日期和时间,但它们有所不同。now() 函数...

    MySQL 获得当前日期时间的函数小结

    在MySQL数据库中,获取当前日期、时间和日期时间的函数对于数据记录和查询至关重要。这篇小结将详细介绍几个常用的函数,帮助你更好地理解和使用这些功能。 首先,`now()`函数是最常用的获取当前日期时间的函数,它...

    mysql 中 时间和日期函数.docx

    1. **当前日期时间函数**: - `now()`:这是最常用的函数,它返回当前的日期和时间,格式为`YYYY-MM-DD HH:MM:SS`。在MySQL中,`current_timestamp`, `current_timestamp()`, `localtime`, `localtime()`, `...

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

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

    剖析mysql的日期和时间函数.pdf

    MySQL中的日期和时间函数是数据库查询中非常关键的一部分,它们允许开发者进行复杂的日期和时间相关的操作,例如筛选、计算和格式化。以下是对这些函数的详细解析: 1. `TO_DAYS(date)`: 此函数将日期转换为自公元...

    mysql日期函数总结

    ### MySQL日期函数总结 在MySQL数据库管理中,处理日期与时间是常见的需求之一。通过使用各种日期函数,我们可以实现对日期进行格式化、计算日期之间的差异等操作,从而提高数据处理效率。本文将对MySQL中常用的...

    db2和mysql数据库函数

    本文将对 DB2 和 MySQL 数据库函数进行分类和介绍,涵盖数学函数、字符串函数、日期函数、聚合函数等多种类型。 一、数学函数 数学函数用于对数字进行计算和分析。DB2 和 MySQL 都提供了一些基本的数学函数,如: ...

Global site tag (gtag.js) - Google Analytics