1:数据库表里是今年的全部数据,
2:时间范围
(例如2019年:
1月份时间条件:【between '2018-12-31 17:00:00' and '2019-01-31 16:59:59'】
2月份时间条件:【between '2019-01-31 17:00:00' and '2019-02-28 16:59:59'】
如果按照这样的时间范围,如何吧1——12个月份的数据行数分组出来?
使用DATEPART函数可以实现,例如
SELECT DATEPART(month,DateTime) as month, * FROM xxxx
可查询出每条数据的月份,然后可更具月份进行分组查询
My Sql 数据库使用 DATE_FORMAT(datetime , '%b') 函数
例如:2月份的数据是包含1月下午17:00后的数据,这样怎么查询
@大da脸: 你说的一月下午17:00后的数据是某一天还是当月说有天数
@一只小熊猫: 17:00 以后的数据就算作第二天的数据了
@大da脸: 你可以使用 CASE
SELECT CASE
WHEN datetime between '2018-12-31 17:00:00' and '2019-01-31 16:59:59' THEN 1
WHEN datetime between '2019-01-31 17:00:00' and '2019-02-28 16:59:59' THEN 2
WHEN datetime between '2019-02-28 17:00:00' and '2019-03-31 16:59:59' THEN 3
ELSE 4
END as month,
@一只小熊猫: 那就是说这个时间范围只能这样写了,我是想把1——12个月的数据总量查询成一个表
例如:{11,22,33,44,55,66,77,88,99,10,11,12}
@大da脸: select month,count(1) from (
SELECT CASE
WHEN datetime between '2018-12-31 17:00:00' and '2019-01-31 16:59:59' THEN 1
WHEN datetime between '2019-01-31 17:00:00' and '2019-02-28 16:59:59' THEN 2
WHEN datetime between '2019-02-28 17:00:00' and '2019-03-31 16:59:59' THEN 3
ELSE 4
END as month,
FROM xxxx
) as table group by moneth
@一只小熊猫: 嗯 我试试
@大da脸: 可以了吗
@一只小熊猫: 目前只能这样了
提供另外一个办法:
构造一个字段char(6),取值为此时间字段+7小时后转为字符串yyyyMM:convert(char(6), dateadd(hour, 7, dateField1), 112)
用此字段group by 即可。