mysql怎么划分时间段 mysql查询时间段的方法

求mysql大神帮助!如何将数据按照以每天早上4点为界限进行分组?

select user_id,DATE_ADD(MAX(DATE_SUB(checktime,INTERVAL 4 hour)),INTERVAL 4 hour) ,DATE_ADD(MIN(DATE_SUB(checktime,INTERVAL 4 hour)),INTERVAL 4 hour) from checkinout group by user_id,DATE_FORMAT(DATE_SUB(checktime,INTERVAL 4 hour),'%Y-%m-%d') ;

成都创新互联主要从事成都网站设计、做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务鄢陵,十年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18982081108

试一下上面的sql语句, 我觉得可以实现你的要求,解决思路就是肯定要分组,普通情况我们分组是同一天分在一组,这样会导致比如'2016-07-13 03:00:00' 这种时间会分在07-13号这一天里 ,按你的要求应该分在07-12这天里 才对,,所以我们把时间减去四个小时然后再分组,DATE_SUB(checktime,INTERVAL 4 hour) 这个就是减去四个小时,然后用DATE_FORMAT 格式化成年月日的格式进行group by,select 的时候 MAX(DATE_SUB(checktime,INTERVAL 4 hour),min(...) 这个是查减了四小时的最大值和最小,也就是当天离开时间和到公司时间(减四小时),在用DATE_ADD 加四个小时,就是原本离开时间和到公司时间

请教各位大牛关于mysql按时间段分组查询的问题。

用 DATE_FORMAT 函数就可以了.

格式化以后的结果里面, 仅仅包含 年月日时 这4个部分即可.

然后就可以 Group By 了。

下面是 DATE_FORMAT 函数的例子与说明。

mysql SELECT

- DATE_FORMAT(NOW(), '%Y~%m~%d %k.%i.%s' ) A;

+---------------------+

| A |

+---------------------+

| 2010~10~22 20.55.09 |

+---------------------+

1 row in set (0.00 sec)

%W 星期名字(Sunday……Saturday)

%D 有英语前缀的月份的日期(1st, 2nd, 3rd, 等等。)

%Y 年, 数字, 4 位

%y 年, 数字, 2 位

%a 缩写的星期名字(Sun……Sat)

%d 月份中的天数, 数字(00……31)

%e 月份中的天数, 数字(0……31)

%m 月, 数字(01……12)

%c 月, 数字(1……12)

%b 缩写的月份名字(Jan……Dec)

%j 一年中的天数(001……366)

%H 小时(00……23)

%k 小时(0……23)

%h 小时(01……12)

%I 小时(01……12)

%l 小时(1……12)

%i 分钟, 数字(00……59)

%r 时间,12 小时(hh:mm:ss [AP]M)

%T 时间,24 小时(hh:mm:ss)

%S 秒(00……59)

%s 秒(00……59)

%p AM或PM

%w 一个星期中的天数(0=Sunday ……6=Saturday )

%U 星期(0……52), 这里星期天是星期的第一天

%u 星期(0……52), 这里星期一是星期的第一天

%% 一个文字“%”。

所有的其他字符不做解释被复制到结果中。

MySql如何按时间段来分组

SELECT DATE_FORMAT(time,'%Y-%m-%d') as day, sum(case when amount0 then amount when amount=0 then 0 end) as amount1

from table where time='2014-11-01' group by day;

我没有测试。time表示日期,amount表示数量。查询11月后每天成交数量

mysql怎样用时间区间分组

SELECT uptime, CASE WHEN datepart(hour,uptime) IN (0,1) THEN 1 

WHEN datepart(hour,uptime) IN (2,3) THEN 2

WHEN datepart(hour,uptime) IN (4,5) THEN 3

WHEN datepart(hour,uptime) IN (6,7) THEN 4

WHEN datepart(hour,uptime) IN (8,9) THEN 5

WHEN datepart(hour,uptime) IN (10,11) THEN 6

WHEN datepart(hour,uptime) IN (12,13) THEN 7

WHEN datepart(hour,uptime) IN (14,15) THEN 8

WHEN datepart(hour,uptime) IN (16,17) THEN 9

WHEN datepart(hour,uptime) IN (18,19) THEN 10

WHEN datepart(hour,uptime) IN (20,21) THEN 11

WHEN datepart(hour,uptime) IN (22,23) THEN 12

ELSE 0 END AS sq

FROM bak_dircost0901

-------------------------------

uptime sq

2014/8/19 9:20:59 5

2014/8/22 20:31:20 11

2014/8/22 20:33:08 11

2014/8/26 13:48:01 7

2014/8/27 16:10:45 9

关于数据库(MYSQL)时间段的拆分问题,怎么样编程实现?

可以看下时间函数

对日期时间进行加减法运算

 (ADDDATE()和SUBDATE()是DATE_ADD()和DATE_SUB()的同义词,也可以用运算符 和-而不是函数

 date是一个DATETIME或DATE值,expr对date进行加减法的一个表达式字符串type指明表达式expr应该如何被解释

 [type值 含义 期望的expr格式]:

 SECOND 秒 SECONDS

 MINUTE 分钟 MINUTES

 HOUR 时间 HOURS

 DAY 天 DAYS

 MONTH 月 MONTHS

 YEAR 年 YEARS

 MINUTE_SECOND 分钟和秒 "MINUTES:SECONDS"

 HOUR_MINUTE 小时和分钟 "HOURS:MINUTES"

 DAY_HOUR 天和小时 "DAYS HOURS"

 YEAR_MONTH 年和月 "YEARS-MONTHS"

 HOUR_SECOND 小时, 分钟, "HOURS:MINUTES:SECONDS"

 DAY_MINUTE 天, 小时, 分钟 "DAYS HOURS:MINUTES"

 DAY_SECOND 天, 小时, 分钟, 秒 "DAYS HOURS:MINUTES:SECONDS"

 expr中允许任何标点做分隔符,如果所有是DATE值时结果是一个DATE值,否则结果是一个DATETIME值)

 如果type关键词不完整,则MySQL从右端取值,DAY_SECOND因为缺少小时分钟等于MINUTE_SECOND)

 如果增加MONTH、YEAR_MONTH或YEAR,天数大于结果月份的最大天数则使用最大天数)

mysql SELECT "1997-12-31 23:59:59" INTERVAL 1 SECOND;

- 1998-01-01 00:00:00

mysql SELECT INTERVAL 1 DAY "1997-12-31";

- 1998-01-01

mysql SELECT "1998-01-01" - INTERVAL 1 SECOND;

- 1997-12-31 23:59:59

mysql SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 SECOND);

- 1998-01-01 00:00:00

mysql SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL 1 DAY);

- 1998-01-01 23:59:59

mysql SELECT DATE_ADD("1997-12-31 23:59:59",INTERVAL "1:1" MINUTE_SECOND);

- 1998-01-01 00:01:00

mysql SELECT DATE_SUB("1998-01-01 00:00:00",INTERVAL "1 1:1:1" DAY_SECOND);

- 1997-12-30 22:58:59

mysql SELECT DATE_ADD("1998-01-01 00:00:00", INTERVAL "-1 10" DAY_HOUR);

- 1997-12-30 14:00:00

mysql SELECT DATE_SUB("1998-01-02", INTERVAL 31 DAY);

- 1997-12-02

mysql SELECT EXTRACT(YEAR FROM "1999-07-02");

- 1999

mysql SELECT EXTRACT(YEAR_MONTH FROM "1999-07-02 01:02:03");

- 199907

mysql SELECT EXTRACT(DAY_MINUTE FROM "1999-07-02 01:02:03");

- 20102

TO_DAYS(date)

 返回日期date是西元0年至今多少天(不计算1582年以前)

mysql select TO_DAYS(950501);

- 728779

mysql select TO_DAYS('1997-10-07');

- 729669

FROM_DAYS(N)

 给出西元0年至今多少天返回DATE值(不计算1582年以前)

mysql select FROM_DAYS(729669);

- '1997-10-07'

本文来自CSDN博客,转载请标明出处:

实现MySQL数据库里面时间段的分割,一个时间字段是跨小时的,现在要按照小时截取出来。

像这种拆分是有其他程序或者脚本去处理的处理完保存到mysql的,光靠mysql是处理不了的


网页标题:mysql怎么划分时间段 mysql查询时间段的方法
本文地址:http://ybzwz.com/article/hhjjjj.html