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

*

*

*

相关推荐
郭萌6964 小时前
多商户平台的分销佣金:为什么同一笔订单,换个时间跑会算出另一个人
mysql·php
库库的数据库笔记5 小时前
金融核心交易系统的数据库国产信创改造该如何做?
大数据·数据库·分布式·mysql·oracle·金融·数据库架构
Linux实战笔记5 小时前
MySQL 索引失效的三种典型场景与 EXPLAIN 分析
mysql·索引失效·explain·执行计划·sql 调优
这个DBA有点耶5 小时前
连接数没满,应用却连不上数据库——TCP backlog溢出与somaxconn的隐藏限制
数据库·mysql·代码规范
etafort5 小时前
js格式化json树结构
json
小羊没烦恼!6 小时前
C#综合揭秘——Entity Framework 并发处理详解
java·开发语言·前端·javascript·数据库·mysql·c#
flytalei7 小时前
从 Docker Compose 到 K3s:逐浪博客 MySQL 数据迁移实战与一致性验证
mysql·docker·容器
SL_staff8 小时前
3分钟上线新规则:业务人员拖拽完成合同超期自动暂停服务
java·mysql·全栈
CS创新实验室8 小时前
数据库突然断电,凭什么没丢数据?——WAL 日志与崩溃恢复
数据库·mysql
用户84913717547169 小时前
【技术干货】MySQL联合索引底层原理 | 最左前缀原则详解
mysql·面试