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

*

*

*

相关推荐
逃逸线LOF2 小时前
SpringMVC拦截器 & 异常处理机制
数据库·mysql
IT_Octopus2 小时前
JSON 日志里的 `{“$ref“:“$.xxx“}`:从 fastjson 兼容包到原生 fastjson2 的迁移实录
开发语言·python·json
清晨0013 小时前
国产化数据库替代方案:openGauss 详解与 MySQL 平滑迁移实战
数据库·mysql
夜雪一千6 小时前
MySQL如何限制账号权限,最小权限原则实践
数据库·mysql
2601_962056236 小时前
EasyMarkets易信:比特币基金流入创年内新高
人工智能·mysql
拾光Ծ6 小时前
【MySQL】复合查询、表的连接
java·数据库·sql·mysql
吃饱了得干活6 小时前
MySQL 进阶:锁与事务、执行计划、内存管理、高可用架构及 8.0 新特性
后端·mysql
Knight_AL7 小时前
MySQL 递归 CTE:WITH RECURSIVE 用法详解
android·数据库·mysql
数据狐(Datafox)7 小时前
mercadolibre.item_get 工程实战:美客多商品详情API技术解析与落地应用
java·人工智能·mysql·json