瀚高数据库按时间年份分组

发布时间 2023-05-23 13:17:28作者: 草帽小子路飞

今天写业务的时候遇到一个需求:根据年份分组统计数量。使用的是瀚高数据库。

听上去好像是小问题,但实际上却是有点困难的。因为数据库中存储的时间是默认到秒的,例如: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可以根据指定下标字符串字串(详情请看官方文档)。

image

按月分组:

select count(*),SUBSTRING(to_char(time),0,8) months from tb1 group by months;
-- 这里也不要写month否则会报错

image

以此类推,我们只需要控制子串就能控制时间的分组范围了