接触过sql的人都知道,sql里面有一些内置函数,比如count(),sum(),max(),min()等。今天先学习一下mysql中一些日期函数:

 

函数

描述

NOW()

返回当前的日期和时间

CURDATE()

返回当前的日期

CURTIME()

返回当前的时间

DATE()

提取日期或日期/时间表达式的日期部分

EXTRACT()

返回日期/时间按的单独部分

DATE_ADD()

给日期添加指定的时间间隔

DATE_SUB()

从日期减去指定的时间间隔

DATEDIFF()

返回两个日期之间的天数

DATE_FORMAT()

用不同的格式显示日期/时间

 

NOW(),CURDATE(),CURTIME(),在我看来一般用于建表语句中deflaut中,来生成当前时间。

DATE(date)则是提取参数中的日期部分。比如:DATE('2011-06-20 14:22:22') 输出 2011-06-20

EXTRACT(unit FROM date)

unit的值如下:

 

Unit 值

MICROSECOND

SECOND

MINUTE

HOUR

DAY

WEEK

MONTH

QUARTER

YEAR

SECOND_MICROSECOND

MINUTE_MICROSECOND

MINUTE_SECOND

HOUR_MICROSECOND

HOUR_SECOND

HOUR_MINUTE

DAY_MICROSECOND

DAY_SECOND

DAY_MINUTE

DAY_HOUR

YEAR_MONTH

 

DATE_ADD(date,INTERVAL num  type)

type也是上述表格中的值,num可以为负。

 

DATE_SUB()同上,如果num为负值,则是加上该数值。

 

DATEDIFF(date1,date2) 返回的是第一个日期比第二个日期多的天数,如果第二个日期大于第一个日期,则返回负数。

比如DATEDIFF('2008-12-31','2008-11-30')  返回31 DATEDIFF('2008-11-30','2008-12-31') 则返回-31

 

DATE_FORMAT(date,format)

format可以为如下值,及其组合:

格式

描述

%a

                             缩写星期名

%b

                             缩写月名

%c

                            月,数值

%D

                            带有英文前缀的月中的天

%d

                            月的天,数值(00-31)

%e

                            月的天,数值(0-31)

%f

                            微秒

%H

                            小时 (00-23)

%h

                            小时 (01-12)

%I

                            小时 (01-12)

%i

                            分钟,数值(00-59)

%j

                            年的天 (001-366)

%k

                            小时 (0-23)

%l

                            小时 (1-12)

%M

                            月名

%m

                            月,数值(00-12)

%p

                            AM 或 PM

%r

                            时间,12-小时(hh:mm:ss AM 或 PM)

%S

                            秒(00-59)

%s

                            秒(00-59)

%T

                            时间, 24-小时 (hh:mm:ss)

%U

                            周 (00-53) 星期日是一周的第一天

%u

                            周 (00-53) 星期一是一周的第一天

%V

                            周 (01-53) 星期日是一周的第一天,与 %X 使用

%v

                            周 (01-53) 星期一是一周的第一天,与 %x 使用

%W

                            星期名

%w

                            周的天 (0=星期日, 6=星期六)

%X

                            年,其中的星期日是周的第一天,4 位,与 %V 使用

%x

                            年,其中的星期一是周的第一天,4 位,与 %v 使用

%Y

                            年,4 位

%y

                            年,2 位

 

DATE_FORMAT()可以输出我们想要的格式的日期,比如:

DATE_FORMAT(NOW(),'%b %d %Y %h:%i %p')
DATE_FORMAT(NOW(),'%m-%d-%Y')
DATE_FORMAT(NOW(),'%d %b %y')
DATE_FORMAT(NOW(),'%d %b %Y %T:%f')

对应的结果为:

 

Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635

 

最近坐一个group by的sql语句的时候,要对日期进行每月的group by,所以去百度上查了下mysql的日期函数,group by 中就可以代入上述函数进行group by,缺点呢,大数据量下应该非常耗资源。