mysql的日期时间函数小汇总(2)

时间差计算函数

PERIOD_DIFF(P1,P2)

返回周期P1 P2 之间的月份数。P1和P2 的格式应该为YYMMYYYYMM。注意周期参数 P1和P2不是日期值。

mysql> SELECT PERIOD_DIFF(9802,199703);

-> 11

DATEDIFF(expr,expr2)

DATEDIFF() 返回起始时间 expr和结束时间expr2之间的天数。Expr和expr2为日期或 date-and-time 表达式。计算中只用到这些值的日期部分。

mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');

-> 1

mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');

-> -31

TIMEDIFF(expr,expr2)

TIMEDIFF() 返回起始时间 expr 和结束时间expr2之间的时间。 expr 和expr2 为时间或date-and-time 表达式,两个的类型必须一样。

mysql> SELECT TIMEDIFF('2000:01:01 00:00:00',

-> '2000:01:01 00:00:00.000001');

-> '-00:00:00.000001'

 

TIMESTAMPDIFF(interval, datetime_expr1, datetime_expr2)

返回日期或日期时间表达式datetime_expr1和datetime_expr2the 之间的整数差。其结果的单位由interval参数给出。interval的法定值同TIMESTAMPADD()函数说明中所列出的相同。

mysql> SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');

-> 3

mysql> SELECT TIMESTAMPDIFF(YEAR,'2002-05-01','2001-01-01');

-> -1

其它日历相关信息获取

DAYNAME(date)

返回date对应的工作日名称,如‘周四’。

DAYOFWEEK(date)

返回date (1 = 周日, 2 = 周一, ..., 7 = 周六)对应的工作日索引。这些索引值符合 ODBC标准。

WEEKDAY(date)

返回date (0 = 周一, 1 = 周二, ... 6 = 周日)对应的工作日索引 weekday index for

mysql> SELECT WEEKDAY('1998-02-03 22:23:00');

-> 1

mysql> SELECT WEEKDAY('1997-11-05');

-> 2

WEEKOFYEAR(date)

将该日期的阳历周以数字形式返回,范围是从153。它是一个兼容度函数,相当于WEEK(date,3)

mysql> SELECT WEEKOFYEAR('1998-02-20');

-> 8

LAST_DAY(date)

获取一个日期或日期时间值,返回该月最后一天对应的值。若参数无效,则返回NULL

mysql> SELECT LAST_DAY('2003-02-05');

-> '2003-02-28'

MONTHNAME(date)

返回date对应月份的全名。

mysql> SELECT MONTHNAME('1998-02-05');

-> 'February '

QUARTER(date)

返回date对应的一年中的季度值,范围是从 1 4

mysql> SELECT QUARTER('98-04-01');

-> 2

WEEK(date[,mode])

该函数返回date对应的星期数。WEEK() 的双参数形式允许你指定该星期是否起始于周日或周一, 以及返回值的范围是否为从0 53 或从1 53。若 mode参数被省略,则使用default_week_format系统自变量的值。

以下表说明了mode参数的工作过程:d

第一天

Mode

工作日

范围

Week 1 为第一周 ...

0

周日

0-53

本年度中有一个周日

1

周一

0-53

本年度中有3天以上

2

周日

1-53

本年度中有一个周日

3

周一

1-53

本年度中有3天以上

4

周日

0-53

本年度中有3天以上

5

周一

0-53

本年度中有一个周一

6

周日

1-53

本年度中有3天以上

7

周一

1-53

本年度中有一个周一

mysql> SELECT WEEK('1998-02-20');

-> 7

mysql> SELECT WEEK('1998-02-20',0);

-> 7

mysql> SELECT WEEK('1998-02-20',1);

-> 8

mysql> SELECT WEEK('1998-12-31',1);

-> 53

注意,假如有一个日期位于前一年的最后一周, 若你不使用2367作为mode参数选择,则MySQL返回 0

mysql> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0);

-> 2000, 0

有人或许会提出意见,认为MySQL 对于WEEK() 函数应该返回 52 ,原因是给定的日期实际上发生在1999年的第52周。我们决定返回0作为代替的原因是我们希望该函数能返回给定年份的星期数。这使得WEEK() 函数在同其它从日期中抽取日期部分的函数结合时的使用更加可靠。

假如你更希望所计算的关于年份的结果包括给定日期所在周的第一天,则应使用 0257 作为mode参数选择。

mysql> SELECT WEEK('2000-01-01',2);

-> 52

作为选择,可使用YEARWEEK()函数:

mysql> SELECT YEARWEEK('2000-01-01');

-> 199952

mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2);

-> '52'

YEARWEEK(date),  YEARWEEK(date,start)

返回一个日期对应的年或周。start参数的工作同 start参数对 WEEK()的工作相同。结果中的年份可以和该年的第一周和最后一周对应的日期参数有所不同。

mysql> SELECT YEARWEEK('1987-01-01');

-> 198653

注意,周数和WEEK()函数队可选参数01可能会返回的(0) w有所不同,原因是此时WEEK() 返回给定年份的语境中的周。 

 -> '1997-10-07'

 

出处:http://liheanyway007.blog.163.com/blog/static/181773148201271343819682/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值