mysql查询json字段内属性

1、数据:表名(sys_instance)

在这里插入图片描述

两条数据的instance_id和json:
1544934805590097921
{
“1544858400449740802”: “192.168.0.1”,
“1544859614050631681”: “192.168.0.1”,
“1544883963344306178”: “未监测”
}

1544934964273201153
{
“1544864900727554049”: “test”,
“1544865021708058625”: “test”,
“1544865147423932417”: “已上线”,
“1544883963344306178”: “已监测”
}

2.查询实例
2.1查询第一条数据instance_id为1544934805590097921的json字段中 "1544858400449740802"属性的值。
使用方式:
SELECT json字段名 -> '$."json内属性的key"' as 别名
        FROM 表名
        WHERE instance_id = id
sql实例:
SELECT json -> '$."1544858400449740802"' as ip
        FROM sys_instance
        WHERE instance_id = 1544934805590097921

该查询语句在java的mapper中的写法:

//instanceMap为instance对象和instance表的映射
<select id="getIp" resultType="String">
        SELECT json -> '$."${ipKey}"' as ip
        FROM sys_instance
        WHERE instance_id = #{instanceId}
    </select>

查询结果:
在这里插入图片描述

2.2查询json字段中 "1544858400449740802"属性值为:192.168.0.1的数据
SELECT *
FROM sys_instance
WHERE json -> '$."1544858400449740802"' = '192.168.0.1'		

该查询语句在java的mapper中的写法:

<resultMap id="instanceMap" type="com.dxc.cmdb.entity.SysInstance">
        <id column="instance_id" property="instanceId"/>
        <result column="model_id" property="modelId"/>
        <result column="json" property="json" typeHandler="com.dxc.cmdb.handler.JsonTypeHandler"/>
    </resultMap>
    
<select id="adoptIPGetInstance" resultMap="instanceMap">
SELECT *
FROM sys_instance
WHERE json -> '$."${ipKey}"' =#{ip} 	
</select>

查询结果:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
数据库JSON字段可以通过几种方法进行查询。第一种方法是使用对象操作方法进行查询,可以通过SQL查询语句的->操作符来提取JSON字段属性值。例如,使用address->'$.province'可以查询JSON字段address的province属性值为"河北省"的记录。第二种方法是使用函数查询,可以使用json_length函数来查询JSON字段数组的长度。例如,使用json_length(address) = 2可以查询JSON字段address数组属性值的长度为2的记录。请注意,这些方法的可用性可能受到MySQL版本的限制。对于MySQL 5.7以下的版本,可以参考一些特定的SQL处理方法。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Mysqljson类型数据查询](https://blog.csdn.net/minshiwang/article/details/130769571)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* [mysql 如何查询json格式的字段](https://blog.csdn.net/weixin_41888013/article/details/105494328)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值