mysql日期和时间函数-二

有时我们可能会遇到这样的需求:当前时间是多少、下个月的今天是星期几、统计截止到当前日期前 3 天的收入总和等。这些需求就需要日期和时间函数来实现,下图列出了 MySQL中支持的一些常用日期和时间函数。

函数功能
CURDATE()返回当前日期
CURTIME()返回当前时间
NOW()返回当前的日期和时间
UNIX_TIMESTAMP(date)返回日期 date 的 UNIX 时间戳
FROM_UNIXTIME返回 UNIX 时间戳的日期值
WEEK(date)返回日期 date 为一年中的第几周
YEAR(date)返回日期 date 的年份
HOUR(time)返回 time 的小时值
MINUTE(time)返回 time 的分钟值
MONTHNAME(date)返回 date 的月份名
DATE_FORMAT(date,fmt)返回按字符串 fmt 格式化日期 date 值
DATE_ADD(date,INTERVAL expr type)返回一个日期或时间值加上一个时间间隔的时间值
DATEDIFF(expr,expr2)返回起始时间 expr 和结束时间 expr2 之间的天数
下面结合一些实例来逐个讲解每个函数的使用方法。
  • CURDATE()函数:返回当前日期,只包含年月日
	mysql> select CURDATE();
	+------------+
	| CURDATE() |
	+------------+
	| 2007-07-11 |
	+------------+
	1 row in set (0.03 sec)
  • CURTIME()函数:返回当前时间,只包含时分秒。
	mysql> select CURTIME();
	+-----------+
	| CURTIME() |
	+-----------+
	| 14:13:46 |
	+-----------+
	1 row in set (0.00 sec)
  • NOW()函数:返回当前的日期和时间,年月日时分秒全都包含。
	mysql> select NOW();
	+---------------------+
	| NOW() |
	+---------------------+
	| 2007-07-11 14:14:06 |
	+---------------------+
	1 row in set (0.00 sec)
  • UNIX_TIMESTAMP(date)函数:返回日期 date 的 UNIX 时间戳。
	mysql> select UNIX_TIMESTAMP(now());
	+-----------------------+
	| UNIX_TIMESTAMP(now()) |
	+-----------------------+
	| 1184134516 |
	+-----------------------+
	1 row in set (0.02 sec)
  • FROM_UNIXTIME ( unixtime ) 函 数 : 返 回 UNIXTIME 时间 戳 的 日 期 值 , 和UNIX_TIMESTAMP(date)互为逆操作。
	mysql> select FROM_UNIXTIME(1184134516) ;
	+---------------------------+
	| FROM_UNIXTIME(1184134516) |
	+---------------------------+
	| 2007-07-11 14:15:16 |
	+---------------------------+
	1 row in set (0.00 sec)
  • WEEK(DATE)和 YEAR(DATE)函数:前者返回所给的日期是一年中的第几周,后者返回所给的日期是哪一年。
	mysql> select WEEK(now()),YEAR(now());
	+-------------+-------------+
	| WEEK(now()) | YEAR(now()) |
	+-------------+-------------+
	| 27 | 2007 |
	+-------------+-------------+
	1 row in set (0.02 sec)
  • HOUR(time)和 MINUTE(time)函数:前者返回所给时间的小时,后者返回所给时间的分钟。
	mysql> select HOUR(CURTIME()),MINUTE(CURTIME());
	+-----------------+-------------------+
	| HOUR(CURTIME()) | MINUTE(CURTIME()) |
	+-----------------+-------------------+
	| 14 | 18 |
	+-----------------+-------------------+
	1 row in set (0.00 sec)
  • MONTHNAME(date)函数:返回 date 的英文月份名称。
	mysql> select MONTHNAME(now());
	+------------------+
	| MONTHNAME(now()) |
	+------------------+
	| July |
	+------------------+
	1 row in set (0.00 sec)
  • DATE_FORMAT(date,fmt)函数:按字符串 fmt 格式化日期 date 值,此函数能够按指定的格式显示日期,
格式符格式说明
%S,%s两位数字形式的秒(00,01,…,59)
%i两位数字形式的分(00,01,…,59)
%H两位数字形式的小时,24 小时(00,01,…,23)
%h,%I两位数字形式的小时,12 小时(01,02,…,12)
%k数字形式的小时,24 小时(0,1,…,23)
%l数字形式的小时,12 小时(1,2,…,12)
%T24 小时的时间形式(hh:mm:ss)
%r12 小时的时间形式(hh:mm:ssAM 或 hh:mm:ssPM)
%pAM 或 PM
%W一周中每一天的名称(Sunday,Monday,…,Saturday)
%a一周中每一天名称的缩写(Sun,Mon,…,Sat)
%d两位数字表示月中的天数(00,01,…,31)
%e数字形式表示月中的天数(1,2,…,31)
%D英文后缀表示月中的天数(1st,2nd,3rd,…)
%w以数字形式表示周中的天数(0=Sunday,1=Monday,…,6=Saturday)
%j以 3 位数字表示年中的天数(001,002,…,366)
%U周(0,1,52),其中 Sunday 为周中的第一天
%u周(0,1,52),其中 Monday 为周中的第一天
%M月名(January,February,…,December)
%b缩写的月名(January,February,…,December)
%m两位数字表示的月份(01,02,…,12)
%c数字表示的月份(1,2,…,12)
%Y4 位数字表示的年份
%y两位数字表示的年份
%%直接值“%”

下面的例子将当前时间显示为“月,日,年”格式:

	mysql> select DATE_FORMAT(now(),'%M,%D,%Y');
	+-------------------------------+
	| DATE_FORMAT(now(),'%M,%D,%Y') |
	+-------------------------------+
	| July,11th,2007 |
	+-------------------------------+
	1 row in set (0.00 sec)
  • DATE_ADD(date,INTERVAL expr type)函数:返回与所给日期 date 相差 INTERVAL 时间段的日期。
    其中 INTERVAL 是间隔类型关键字,expr 是一个表达式,这个表达式对应后面的类型,type是间隔类型 ,MySQL 提供了 13 种间隔类型,如表所示。
表达式类型描述格式
HOUR
MINUTEmm
SECONDss
YEARYY
MONTHMM
DAYDD
YEAR_MONTH年和月YY-MM
DAY_HOUR日和小时DD hh
DAY_MINUTE日和分钟DD hh:mm
DAY_ SECOND日和秒DD hh:mm:ss
HOUR_MINUTE小时和分hh:mm
HOUR_SECOND小时和秒hh:ss
MINUTE_SECOND分钟和秒mm:ss

来看一个具体的例子,在这个例子中第 1 列返回了当前日期时间,第 2 列返回距离当前日期
31 天后的日期时间,第 3 列返回距离当前日期一年两个月后的日期时间。

	mysql> select now() current,date_add(now(),INTERVAL 31 day) after31days,	date_add(now(),INTERVAL '1_2' year_month) after_oneyear_twomonth;
	+---------------------+---------------------+------------------------+
	| current | after31days | after_oneyear_twomonth |
	+---------------------+---------------------+------------------------+
	| 2007-09-03 11:30:48 | 2007-10-04 11:30:48 | 2008-11-03 11:30:48 |
	+---------------------+---------------------+------------------------+
	1 row in set (0.01 sec)

同样也可以用负数让它返回之前的某个日期时间,如下第 1 列返回了当前日期时间,第 2列返回距离当前日期 31 天前的日期时间,第 3 列返回距离当前日期一年两个月前的日期时间。

	mysql> select now() current,date_add(now(),INTERVAL -31 day) after31days,date_add(now(),INTERVAL '-1_-2' year_month) after_oneyear_twomonth;
	+---------------------+---------------------+------------------------+
	| current | after31days | after_oneyear_twomonth |
	+---------------------+---------------------+------------------------+
	| 2007-09-03 11:36:35 | 2007-08-03 11:36:35 | 2006-07-03 11:36:35 |
	+---------------------+---------------------+------------------------+
	1 row in set (0.00 sec)
  • DATEDIFF(date1,date2)函数:用来计算两个日期之间相差的天数。下面的例子计算出当前距离 2008 年 8 月 8 日的奥运会开幕式还有多少天:
	mysql> select DATEDIFF('2008-08-08',now());
	+------------------------------+
	| DATEDIFF('2008-08-08',now()) |
	+------------------------------+
	| 328 |
	+------------------------------+
	1 row in set (0.01 sec)

到此mysql常用的时间日期函数就整理完了,快学习吧

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值