好用的sql小方法

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值