MySQL 中 DATE_FORMAT() 函数对日期格式化参数与JAVA中各种日期表示字母对比

项目中的统计报表作的很多,需求中有按周、月统计数据的。查看了Mysql的API,发现Date_format是格式化日期的,看了Date_format()的具体说明后就用这个函数按周统计,sql大致如下:

select DATE_FORMAT(check_date ,'%X-%V') dates

,avg(weight)/10000  weight

from ho_body

where user_id=295

and weight > 0

and (check_date between '2009-02-24' and '2010-02-24')

group by dates

查出的结果为:

dates       weight

2009-30   80.9

2009-31   80.425

2009-32   80.76666667

2009-33   80.75384615

2009-34   80.8

2009-35   79.88

2009-36   80.06

2009-37   79.875

2009-38   79.075

2009-39   79.26666667

2009-40   79.16666667

2009-41   78.875

2009-42   78.33333333

2009-43   78.77272727

2009-44   77.625

2009-45   77.825

2009-46   77.575

2009-47   77.45

2009-48   81.25

2009-49   76.5

2009-50   77.83333333

2009-52   79.8

2010-02   79.2

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

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

%Y年,4 位

%y年,2 位

难道%X只能与%V一起用表示年-周,并且周日为一周开始,

%x与%v一起用,表示 年-周,周一为一周开始?

再看到前面的

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

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

以"月"为周期做数据统计

%M月名

%m月,数值(00-1

select distinct DATE_FORMAT(check_date ,'%Y-%m') c1

,avg(weight)/10000  wei

from ho_body

where user_id=295

and weight > 0

and (check_date between '2009-02-24' and '2009-10-31')

group by c1

结果展示:

c1               wei

2009-08    80.66388889

2009-09    79.70555556

2009-10    78.83714286

总结:

-- 以" 周/月 "为周期做数据统计

select DATE_FORMAT(check_date ,'%X-%V')  -- 西方习惯, 以星期日为一周中的第一天

,DATE_FORMAT(check_date ,'%x-%v')   -- 中国习惯, 以星期一为一周中的第一天

,DATE_FORMAT(check_date ,'%Y-%m')

Date_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)

%pAM 或 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 位

Mysql中还有另外几种返回日期的函数,如:

SELECT EXTRACT(YEAR_MONTH FROM datecolum )  -- 返回格式如200902

EXTRACT() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。

语法

EXTRACT(unit FROM date)

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

字母 日期或时间元素 表示 示例

GEra 标志符TextAD

y年Year1996; 96

M年中的月份MonthJuly; Jul; 07

w年中的周数Number27

W月份中的周数Number2

D年中的天数Number189

d月份中的天数Number10

F月份中的星期Number2

E星期中的天数TextTuesday; Tue

aAm/pm 标记TextPM

H一天中的小时数(0-23)Number0

k一天中的小时数(1-24)Number24

Kam/pm 中的小时数(0-11)Number0

ham/pm 中的小时数(1-12)Number12

mi小时中的分钟数Number30

s分钟中的秒数Number55

S毫秒数Number978

z时区General time zonePacific Standard Time; PST; GMT-08:00

Z时区RFC 822 time zone-0800