今天写业务的时候遇到一个需求:根据年份分组统计数量。使用的是瀚高数据库。
听上去好像是小问题,但实际上却是有点困难的。因为数据库中存储的时间是默认到秒的,例如:2023-04-11 00:00:00,如果我们直接使用group by time的话,就会以秒为基本单位进行分组,这显然不是我们想要的,所以我们要做的就是扩大分组的范围。由于瀚高数据库中没有mysql的DATE_FORMAT函数,所以我们无法相mysql那样操作。
在严格的 SQL 里,GROUP BY 只能对源表的列进行分组,但 HGDB 把这个扩展为允许 GROUP BY 去根据选择列表中的列分组,也允许对值表达式进行分组,而不仅是简单的列名。
所以我们要做就是将date类型的时间值转为我所期望的格式来实现控制时间范围,思路就是将date类型转为字符串然后将字符串进行切割作为分组的依据
按年分组:
select count(*),SUBSTRING(to_char(time),0,5) years from tb1 group by years;
-- 这里注意不写year否则会报错,因为year是关键字
to_char函数可以将date类型的值转为字符串,substring可以根据指定下标字符串字串(详情请看官方文档)。
按月分组:
select count(*),SUBSTRING(to_char(time),0,8) months from tb1 group by months;
-- 这里也不要写month否则会报错
以此类推,我们只需要控制子串就能控制时间的分组范围了
标签:00,年份,group,数据库,char,分组,date From: https://www.cnblogs.com/luffy123/p/17424315.html