1、取到查询条件为一个字段的截取部分
select
a.order_no
from t_order a
where
a.deleted = 0
and substring(a.order_no,1,8) = #{date}
ORDER BY
a.add_time desc
limit 1
2、字段逗号隔开的函数使用find_in_set,获取根据字典查询的名称拼接
/**
* 1.获取当前阶段名称
*/
inspectTitleCustomerTemp.setCurrentPhaseLabel(dictItemMapper.selectItemLabelsStr(new DictItemLabelsStrDto("dqjd","t_inspect_title_customer","current_phase",id)));
select
GROUP_CONCAT(b.item_label) str
from
${tableName} a
left join t_dict_item b
left join t_dict c
on b.dict_id = c.id
on FIND_IN_SET(b.item_value,a.${tableField})
where c.dict_key = #{dictKey}
and a.id = #{id}
3、根据多个条件分组,和排序
GROUP BY
a.id,
c.id
ORDER BY
c.edit_time DESC,
d.edit_time DESC
4、模糊查询一个list集合多个条件查询一个逗号拼接的字段
<if test="search.currentPhase != null and search.currentPhase.size > 0">
<foreach collection="search.currentPhase" item="item" index="index" open="" separator="" close="">
and t.current_phase like '%${item}%'
</foreach>
</if>
5、使用函数获取比较时间段大小
获取时间加上五年大于现在时间减去三个月
DATE_ADD( a.last_yearly_inspect_date, INTERVAL 5 YEAR ) > DATE_SUB(NOW( ),INTERVAL 3 MONTH )
6、COALESCE关键字的使用
COALESCE是sql标准里面的一个关键字,我们可以和聚合函数sum,count,max等一起使用完成一些特殊的功能。
1、查询某一个列总和,如果没有数据或者NULL返回0
表字段中有一个字段:公里数(f_gls),统计总的公里数
COALESCE (sum(f_gls), 0) distance
2、查出最大值
表字段中有一个字段:模块id(f_moudleId),查询最大值
COALESCE(MAX(f_moudleId),0) max_moudleId
3、综合使用:格式化
根据知识库表里面的记录,生成下一条知识库id
SELECT
CONCAT('KB',DATE_FORMAT(NOW(),'%Y%m%d'),LPAD(COALESCE(COUNT(id),0)+1, 3, '0'))
FROM
user_knowledgebase
WHERE
DATEDIFF(DATE(now()), DATE(createtime))= 0
7、sql根据查询顺序返回结果
SELECT id,autonum FROM program WHERE autonum IN (202000016,202001072) order by FIELD(autonum,202000016,202001072);