PG数据库 jsonb字段 模糊查询

背景:
项目由于多语言的设计,将字段设置成json字段类型,同时存储中文和英文
页面上通过输入框实现模糊的查询

一、表结构:name字段设置jsonb类型

在这里插入图片描述

二、表数据

在这里插入图片描述

3、Mybatis编写sql

 select 
            pp.name ->>'zh-CN' as pmsProductName,
            pp.name ->>'en' as pmsProductNameEN,
            ppc.name->>'zh-CN' as pmsProductCategoryName,
            ppc.name->>'en' as pmsProductCategoryNameEN from pms_product pp
            where 1=1 
<if test="null != param.pmsProductName and '' != param.pmsProductName">
                    and (
                    pp."name" #>>'{zh-CN}' ilike '%'||#{param.pmsProductName}||'%'
                    or pp."name" #>>'{en}' ilike '%'||#{param.pmsProductName}||'%'
                    )
            </if>

或者另外一种查询方法:

select 
            pp.name ->>'zh-CN' as pmsProductName,
            pp.name ->>'en' as pmsProductNameEN,
            ppc.name->>'zh-CN' as pmsProductCategoryName,
            ppc.name->>'en' as pmsProductCategoryNameEN from pms_product pp
            where 1=1 
<if test="null != param.pmsProductName and '' != param.pmsProductName">
                    and (
                    pp."name" ->>'zh-CN' ilike '%'||#{param.pmsProductName}||'%'
                    or pp."name" ->>'en' ilike '%'||#{param.pmsProductName}||'%'
                    )
            </if>

4、其中pmsProductName是页面传递的值,zh-CN和en分别表示对应的中英文key

按照对应的value实现模糊查询,特别注意jsonb 模糊查询采用 #>> 的写法或者是 ->> 的写法,两者使用上存在一点点的差异,前者使用# 需要配合{ }一起使用,后者不需要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值