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"}') ;

*

*

*

相关推荐
人间打气筒(Ada)2 小时前
mysql数据库之DDL、DML
运维·数据库·sql·mysql·dba·dml·dql
2601_953465613 小时前
HLS.js 原生开发!m3u8live.cn打造最贴合项目的 M3U8 在线播放器
开发语言·前端·javascript·python·json·ecmascript·前端开发工具
一个天蝎座 白勺 程序猿5 小时前
KingbaseES数据库MySQL兼容性解析:从TCO账本到“傻瓜式“迁移的密码
android·数据库·mysql·kingbasees
华章酱5 小时前
InnoDB高并发之谜:揭开MVCC与快照读的面纱
数据库·mysql
未来龙皇小蓝5 小时前
【MySQL-索引调优】04:回表相关概念
数据库·mysql·性能优化
长安11085 小时前
mysql(C++)----管理系统
mysql
kgduu5 小时前
js之json处理
前端·javascript·json
闻哥6 小时前
MySQL索引核心原理:B+树生成、页分裂与页合并全解析
java·jvm·b树·mysql·adb·面试·springboot
青柠代码录6 小时前
【MySQL】DISTINCT 详解
数据库·mysql