MySQL中DATE_FORMAT() 函式對日期格式化引數與JAVA中各種日期表示字母對比
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 andweight > 0 and (check_datebetween'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-3879.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) |
%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 位 |
Mysql中還有另外幾種返回日期的函式,如:
SELECT EXTRACT(YEAR_MONTH FROMdatecolum ) -- 返回格式如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 |
JAVA中各種日期表示字母
字母 日期或時間元素 表示 示例
| Era 標誌符 | Text |
|
| 年 | Year |
|
| 年中的月份 | Month |
|
| 年中的週數 | Number |
|
| 月份中的週數 | Number |
|
| 年中的天數 | Number |
|
| 月份中的天數 | Number |
|
| 月份中的星期 | Number |
|
| 星期中的天數 | Text |
|
| Am/pm 標記 | Text |
|
| 一天中的小時數(0-23) | Number |
|
| 一天中的小時數(1-24) | Number |
|
| am/pm 中的小時數(0-11) | Number |
|
| am/pm 中的小時數(1-12) | Number |
|
| 小時中的分鐘數 | Number |
|
| 分鐘中的秒數 | Number |
|
| 毫秒數 | Number |
|
| 時區 | General time zone |
|
| 時區 | RFC 822 time zone |
|