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

*

*

*

相关推荐
程序猿乐锅1 小时前
【Tilas|第三篇】多表SQL语句
数据库·经验分享·笔记·学习·mysql
归途醉染6 小时前
Swifter.Json
c#·json·swifter.json
网络点点滴7 小时前
NPM 和 package.json 文件简介
前端·npm·json
程序猿online7 小时前
本地mysql密码重置
数据库·mysql
Bert.Cai8 小时前
MySQL CEIL()函数详解
数据库·mysql
Bert.Cai8 小时前
MySQL FLOOR()函数详解
数据库·mysql
小碗羊肉8 小时前
【MySQL | 第七篇】索引
数据库·mysql
hanyi_qwe9 小时前
Mysql 与 Nginx 双机高可用
数据库·mysql·nginx
徐子童9 小时前
复合索引会失效的场景
数据库·mysql·面试题·索引失效
zxrhhm10 小时前
MySQL 索引回表(Back to Table)详解
数据库·mysql