背景
有的时候,我们需要截取数据表中某字段的一部分数据,比如某个地域下有很多地区,同一地域前缀相同,地区不同,后缀也不同,假设10001,10002表示的是同一地域下的不同地区,那么我们想要统计这个地域信息该怎么处理呢?有人说直接加个地域的字段
不就行了,其实这也是一种办法,但是如果表中字段比较多,或者业务上不允许加个字段解决,那这个时候我们该怎么截取地区字段值的前缀用来获取地域值呢?
其实数据库提供了left和right
两个函数帮助我们截取字段值
,分别是
left(reg_id, 3)
right(org_id, 2)
他们分别表示从reg_id中截取前三位
,从org_id中截取后两位
,下面看两个具体的SQL例子
此外还有substring
函数,它可以从字段中间截取,但是没法截取查询出的结果中的字段值
substring(reg_id, 0, 2) #截取reg_id的前两位
案例
根据地域reg_id的前四位即地区用res_id表示进行分组统计,统计各地区的总用电量,总充电次数
注意
这里只能用left而不能用substring,因为substring无法在group by中使用
<select id="getResRecords" parameterType="string" resultType="OperatingCountDto">
select reg_id,LEFT(reg_id,4) as resId, sum(total_kwh) as totalKwh,
sum(total_times) as totalTimes from ${tableName}
where LEFT(reg_id,4) is not null GROUP BY LEFT(reg_id,4);
</select>