数据库应用中对日期和时间的操作是非常常用的,MySQL自带了许多很有用的函数,可以帮助我们便捷地实现某些需求。下面我们来介绍一下相关的MySQL日期与实践函数。 获取当前日期: mysql> SELECT curdate();+------------+| curdate() |+------------+| 2010-1
数据库应用中对日期和时间的操作是非常常用的,MySQL自带了许多很有用的函数,可以帮助我们便捷地实现某些需求。下面我们来介绍一下相关的MySQL日期与实践函数。
获取当前日期:
mysql> SELECT curdate(); +------------+ | curdate() | +------------+ | 2010-11-16 | +------------+ 1 row in set
mysql> SELECT CURRENT_DATE(); +----------------+ | CURRENT_DATE() | +----------------+ | 2010-11-16 | +----------------+ 1 row in set
获取当前时间:
mysql> SELECT curtime(); +-----------+ | curtime() | +-----------+ | 12:48:40 | +-----------+ 1 row in set
mysql> SELECT CURRENT_TIME(); +----------------+ | CURRENT_TIME() | +----------------+ | 12:49:00 | +----------------+ 1 row in set
获取当前时间日期:
mysql> SELECT now(); +---------------------+ | now() | +---------------------+ | 2010-11-16 12:50:39 | +---------------------+ 1 row in set
mysql> SELECT CURRENT_TIMESTAMP(); +---------------------+ | CURRENT_TIMESTAMP() | +---------------------+ | 2010-11-16 12:51:01 | +---------------------+ 1 row in set
注意:在一个单一询问中,对诸如NOW() 的函数多次访问总是会得到同样的结果。
日期增减:
DATE_ADD(date,INTERVAL expr type) DATE_SUB(date,INTERVAL expr type)
这些函数执行日期运算。
MySQL 允许任何expr 格式中的标点分隔符。表中所显示的是建议的 分隔符。若 date 参数是一个 DATE 值,而你的计算只会包括 YEAR、MONTH和DAY部分(即, 没有时间部分), 其结果是一个DATE 值。否则,结果将是一个 DATETIME值。
指定日期1秒后:
mysql> SELECT DATE_ADD('2010-12-31 23:59:59', INTERVAL 1 SECOND); +----------------------------------------------------+ | DATE_ADD('2010-12-31 23:59:59', INTERVAL 1 SECOND) | +----------------------------------------------------+ | 2011-01-01 00:00:00 | +----------------------------------------------------+ 1 row in set
指定日期1天后:
mysql> SELECT DATE_ADD('2010-12-31 23:59:59', INTERVAL 1 DAY); +-------------------------------------------------+ | DATE_ADD('2010-12-31 23:59:59', INTERVAL 1 DAY) | +-------------------------------------------------+ | 2011-01-01 23:59:59 | +-------------------------------------------------+ 1 row in set
指定日期减去10小时:
mysql> SELECT DATE_ADD('2011-01-01 00:00:00', INTERVAL '-1 10' DAY_HOUR); +------------------------------------------------------------+ | DATE_ADD('2011-01-01 00:00:00', INTERVAL '-1 10' DAY_HOUR) | +------------------------------------------------------------+ | 2010-12-30 14:00:00 | +------------------------------------------------------------+ 1 row in set
指定日期的一个月前:
mysql> SELECT DATE_SUB('2011-01-02', INTERVAL 31 DAY); +-----------------------------------------+ | DATE_SUB('2011-01-02', INTERVAL 31 DAY) | +-----------------------------------------+ | 2010-12-02 | +-----------------------------------------+ 1 row in set
指定日期的前一天:
mysql> SELECT date_add('2011-01-01', INTERVAL -1 DAY); +-----------------------------------------+ | date_add('2011-01-01', INTERVAL -1 DAY) | +-----------------------------------------+ | 2010-12-31 | +-----------------------------------------+ 1 row in set
将日期时间转换成指定格式:
DATE_FORMAT(date,format)
根据format 字符串安排date 值的格式。所有其它字符都被复制到结果中,无需作出解释。注意,'%'字符要求在格式指定符之前。月份和日期说明符的范围从零开始,原因是 MySQL允许存储诸如 '2004-00-00'的不完全日期。
mysql> SELECT DATE_FORMAT( FROM_UNIXTIME( 1290996580 ), '%Y-%m-%d %H:%i:%s' ); +-----------------------------------------------------------------+ | DATE_FORMAT( FROM_UNIXTIME( 1290996580 ), '%Y-%m-%d %H:%i:%s' ) | +-----------------------------------------------------------------+ | 2010-11-29 10:09:40 | +-----------------------------------------------------------------+ 1 row in set
mysql> SELECT DATE_FORMAT( FROM_UNIXTIME( 1290996580 ) , '%Y-%m-%d' ); +---------------------------------------------------------+ | DATE_FORMAT( FROM_UNIXTIME( 1290996580 ) , '%Y-%m-%d' ) | +---------------------------------------------------------+ | 2010-11-29 | +---------------------------------------------------------+ 1 row in set
下面两个函数
FROM_UNIXTIME(unix_timestamp) , FROM_UNIXTIME(unix_timestamp,format)
返回'YYYY-MM-DD HH:MM:SS'或YYYYMMDDHHMMSS 格式值的unix_timestamp参数表示,具体格式取决于该函数是否用在字符串中或是数字语境中。
若format 已经给出,则结果的格式是根据format 字符串而定。 format 可以包含同DATE_FORMAT() 函数输入项列表中相同的说明符。
mysql> SELECT FROM_UNIXTIME(875996580); +--------------------------+ | FROM_UNIXTIME(875996580) | +--------------------------+ | 1997-10-05 04:23:00 | +--------------------------+ 1 row in set
mysql> SELECT FROM_UNIXTIME(875996580) + 0; +------------------------------+ | FROM_UNIXTIME(875996580) + 0 | +------------------------------+ | 19971005042300.000000 | +------------------------------+ 1 row in set
MySql unix时间转换成SQLServer适用的时间格式:
mysql> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d %H:%i:%s'); +------------------------------------------------------+ | FROM_UNIXTIME(UNIX_TIMESTAMP(), '%Y-%m-%d %H:%i:%s') | +------------------------------------------------------+ | 2010-11-16 19:12:11 | +------------------------------------------------------+ 1 row in set