当前位置: 首页 > news >正文

达梦数据库对json字段进行操作

在达梦数据库中,字段类型不能显式定义为JSON,通常以VARCHAR或TEXT类型存储JSON字符串,可以通过内置的JSON函数对JSON格式数据进行操作和条件过滤。


1. 创建表并插入JSON数据
假设字段类型为VARCHAR,存储JSON字符串:

-- 创建表(字段为VARCHAR类型)
CREATE TABLE user_data (id INT PRIMARY KEY,user_info VARCHAR(2000) CHECK (user_info IS JSON)  -- 添加JSON格式校验约束
);-- 插入JSON数据
INSERT INTO user_data VALUES 
(1, '{"name": "张三", "age": 25, "address": {"city": "北京", "district": "海淀区"}}'),
(2, '{"name": "李四", "age": 30, "address": {"city": "上海", "district": "浦东新区"}}');

2. 查询JSON字段并条件过滤
场景1:提取单个属性值
查询所有用户姓名,并筛选年龄大于28岁的记录:

SELECT id,JSON_VALUE(user_info, '$.name') AS name,JSON_VALUE(user_info, '$.age') AS age 
FROM user_data 
WHERE CAST(JSON_VALUE(user_info, '$.age') AS INT) > 28;  -- 需将字符串转换为数值比较

场景2:嵌套对象查询
查询用户所在城市为“上海”的记录:

SELECT id,JSON_VALUE(user_info, '$.address.city') AS city 
FROM user_data 
WHERE JSON_VALUE(user_info, '$.address.city') = '上海'; 

场景3:使用JSON_QUERY查询复杂结构
提取完整的地址对象(返回JSON片段):

SELECT id,JSON_QUERY(user_info, '$.address') AS address 
FROM user_data;

3. 更新JSON字段
场景1:修改属性值
将ID为1的用户年龄改为30:

UPDATE user_data 
SET user_info = JSON_MODIFY(user_info, '$.age', 30)  -- 直接修改JSON字符串中的值
WHERE id = 1;

场景2:删除属性
删除用户的district字段:

UPDATE user_data 
SET user_info = JSON_MODIFY(user_info, 'delete $.address.district', NULL) 
WHERE id = 2;

4. 处理数组类型
若JSON中包含数组(如hobbies: ["阅读", "跑步"]):

-- 查询第一个爱好
SELECT JSON_VALUE(user_info, '$.hobbies[0]') AS hobby 
FROM user_data;-- 筛选包含“阅读”爱好的用户
SELECT *
FROM user_data 
WHERE JSON_VALUE(user_info, '$.hobbies[0]') = '阅读';

5. 特殊处理:去除引号比较
当JSON值的类型为字符串时,需用JSON_UNQUOTE去除引号:

SELECT *
FROM user_data 
WHERE JSON_UNQUOTE(JSON_EXTRACT(user_info, '$.name')) LIKE '%张%';

注意事项: 路径表达式:达梦使用$表示根节点,如$.name$.address.city

http://www.xdnf.cn/news/531163.html

相关文章:

  • 【Git】分支管理
  • Go语言八股文之Mysql优化
  • 【Golang笔记02】函数、方法、泛型、接口学习笔记
  • AI在网络安全中的应用之钓鱼邮件检测
  • 网络安全-等级保护(等保) 2-7 GB/T 25058—2019 《信息安全技术 网络安全等级保护实施指南》-2019-08-30发布【现行】
  • Canvas设计图片编辑器全讲解(一)Canvas基础(万字图文讲解)
  • OSCP备战-pwnlab_init靶机详细步骤
  • 办公效率提升:一键合并多个Word文档的解决方案
  • 【聚类】K-means++
  • Spring Cloud初探之spring cloud gateway实现转发、鉴权及负载均衡(六)
  • spring中yml配置上下文与tomcat等外部容器不一致问题
  • Yocto和Buildroot功能和区别
  • 数据库连接池技术与 Druid 连接工具类实现
  • w~自动驾驶合集1
  • 腾讯云Mysql实现远程链接
  • idea2024 不知道安装了什么插件,界面都是中文的了,不习惯,怎么修改各个选项改回英文
  • 文件字节流
  • LLM笔记(九)KV缓存(2)
  • RK3568解码1080P视频时遇到系统崩溃内核挂掉的解决方案
  • C语言:在操作系统中,链表有什么应用?
  • 安全强化的Linux
  • RLᵛ_ Better Test-Time Scaling by Unifying LLM Reasoners With Verifiers
  • 【TTS回顾】Bert-VITS2深度解析:融合BERT的多语言语音合成模型
  • 详细总结和讲解redis的基本命令
  • JavaScript 性能优化实战指南
  • Unity3D HUD UI性能优化方案
  • 卓力达手撕垫片:精密制造的创新解决方案与多领域应用
  • Unreal Engine: Windows 下打包 AirSim项目 为 Linux 平台项目
  • 【成品设计】STM32和UCOS-II的项目
  • 软考教材重点内容 信息安全工程师 25章 移动安全 26章 大数据安全