MySQL JSON 数据操作

注意事项:

EF Core 版本:EF.Functions.JsonContains 方法需要 EF Core 5.0 或更高版本,并且数据库需要支持 JSON 函数。

MySQL 提供程序:确保安装了 Pomelo.EntityFrameworkCore.MySql 或 Oracle.MySql.EntityFrameworkCore 提供程序。

*、CAST

sql 复制代码
SELECT CAST('{"name": "John", "age": 30}' AS JSON)

*、JSON_CONTAINS

sql 复制代码
-- 示例1
SELECT * FROM SaleOrdersDetails
WHERE 1=1 
AND Risk <> '' 
AND JSON_CONTAINS(CAST(Risk AS JSON), '{"itemCode": "applyno", "itemValue": "BH20260206111111"}') ;


-- 示例2
WHERE 1=1 
AND JSON_CONTAINS(jsonObject1, JSON_OBJECT('itemValue', 'BH20260206111111'));
AND JSON_CONTAINS(jsonObject2, JSON_OBJECT('name', 'John'));

*

*

*

*

*

*、表结构

sql 复制代码
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for SaleOrdersDetails
-- ----------------------------
DROP TABLE IF EXISTS `SaleOrdersDetails`;
CREATE TABLE `SaleOrdersDetails`  (
  `Id` char(36) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL,
  `TenantId` char(36) CHARACTER SET ascii COLLATE ascii_general_ci NULL DEFAULT NULL,
  `OrderId` char(36) CHARACTER SET ascii COLLATE ascii_general_ci NOT NULL COMMENT '订单编号',
  `Risk` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '标的信息相关内容',
  `Refund` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '退保相关内容',
  `Other` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '其他信息',
  PRIMARY KEY (`Id`) USING BTREE,
  INDEX `IX_SaleOrdersDetails_OrderId`(`OrderId` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;

*、risk字段类型是 longtext 字符串类型,存储的字符串内容是json数组格式的字符串

bash 复制代码
[
  {
    "itemText": "",
    "itemCode": "applyno",
    "itemValue": "BH20260206111111",
    "itemValueDesc": ""
  },
  {
    "itemText": "",
    "itemCode": "enter_institution_type",
    "itemValue": "6",
    "itemValueDesc": ""
  },
  {
    "itemText": "",
    "itemCode": "bank_id",
    "itemValue": "100",
    "itemValueDesc": ""
  }
]

*、SQL查询语句

sql 复制代码
-- 注意 注意 注意
-- Risk <> '' 一定要写在前面,要不然会报错
SELECT Id,OrderId,Risk,Refund,Other,PayUrl,PolicyUrl,InvoiceUrl,GuaranteeLetterUrl
,CAST(Risk AS JSON) AS js11onject
FROM SaleOrdersDetails
WHERE 1=1 
AND Risk <> ''
AND JSON_CONTAINS(CAST(Risk AS JSON), JSON_OBJECT('itemValue', 'BH20260206111111'));
LIMIT 0,1000


-- 
SELECT * FROM SaleOrdersDetails
WHERE 1=1 
AND Risk <> '' 
AND JSON_CONTAINS(CAST(Risk AS JSON), '{"itemCode": "applyno", "itemValue": "BH20260206111111"}') ;

*

*

*

相关推荐
aiks_yuan2 小时前
MySQL GROUP BY 很慢怎么优化:加了索引反而从 1 秒变 7 秒,Using temporary 该不该消(MySQL 8.2 实测 400 万行)
mysql
数据库小学妹3 小时前
MySQL大字段治理:行溢出机制、覆盖索引与拆表
数据库·mysql·性能优化
这个DBA有点耶4 小时前
MySQL 8.0不可见索引:删索引怕出事,不删又拖慢写入——中间态怎么用?
数据库·mysql·代码规范
噜哥带你玩转 AI 大模型7 小时前
面试加分项!CASE WHEN 两种写法、CTE 公共表表达式、四大类窗口函数,老哥一次讲透
mysql·窗口函数·cte·sql 进阶
bksczm8 小时前
InnoDB 内存结构总览:Change Buffer、AHI 与 Log Buffer
数据库·mysql
招风的黑耳8 小时前
SpringBoot+Vue+MySQL 民宿在线预定平台 完整可运行版(源码+文档)
vue.js·spring boot·mysql
.痞老板.10 小时前
mysql初阶--数据库设计
数据库·mysql·oracle
Decay__11 小时前
SQL Server 数据库全栈运维实战系列 — 合集索引(24 篇)
运维·数据库·sql·mysql·架构
Thanks_ks12 小时前
SQL 的 GROUP BY 与聚合函数:从会写 SELECT 到会做统计
数据库·sql·mysql·group by·数据统计·聚合函数·having
Decay__20 小时前
12_MySQL InnoDB 内存与锁调优 —— Buffer Pool、redo log、隔离级别与锁等待
运维·数据库·sql·mysql·架构