SUBSTRING_INDEX
类似Java split,根据符号分割字符串
# 例如我的地址address是1_2_1002:楼号_单元号_门号,此时需要取出楼号
# 就需要用到类似split('_')的函数
SUBSTRING_INDEX(address,'_',1) -> 1
SUBSTRING_INDEX(address,'_',2) -> 1_2
SUBSTRING_INDEX(address,'_',-1) -> 1002
SUBSTRING_INDEX(address,'_',-2) -> 2_1002
SUBSTRING_INDEX(address(channel_no,'_',-2),'_',1) -> 2
JSON_CONTAINS
当mysql表中某列存的是json字符串(可能为了节省存储空间,或是直接存储三方接口的返回值等),而取出json的某个field就显示十分困难。
方法一:可以把json映射成oject对象后再取出某个attribute。
方法二:直接使用sql自带的JSON相关方法[1]。
sql的自带方法不过多赘述。此时遇到的问题是:需要将A、B两表连表查询,而查询条件是B表中json列的某个attribute。直接上sql:
# 该sql会在A\B表连接后,取出b表plan_info中planName为#{landingPageNo}的所有记录的数量
@Select("<script>" +
" select count(1) " +
" from table_a a " +
" left join table_b b on a.b_id = b.id " +
" and a.module_val = CONCAT(b.link_type, '_', b.channel_abbrev) " +
" where JSON_CONTAINS(b.plan_info, JSON_OBJECT('planName', #{landingPageNo}))" +
"</script>")
Reference
[1] https://juejin.cn/post/7143417701912805389