当前位置: 首页 > 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

相关文章:

  • C++开源库argh使用教程
  • Qt Widgets模块功能详细说明,基本控件:QCheckBox(三)
  • JAVA Web 期末速成
  • DeepSeek 赋能机器人研发:从技术革新到场景落地
  • 【C/C++】C语言内存操作与字符串处理汇总
  • 简单实现网页加载进度条
  • Bootstrap 5 容器与网格系统详解
  • Java中的流详解
  • 2025ICPC邀请赛南昌游记
  • 【C语言基础语法入门】通过简单实例快速掌握C语言核心概念
  • 安防综合管理系统EasyCVR视频融合平台安防知识:门禁系统与视频监控系统如何联动?
  • 【Qwen开源】WorldPM: 扩展人类偏好建模
  • EMC基础知识-EFT(上)
  • 基于AI的Web数据管道,使用n8n、Scrapeless和Claude
  • mybatis-plus实操
  • 【Nextcloud】使用 LNMP 架构搭建私有云存储:Nextcloud 实战指南
  • TDesign AI Chat - Vue3.x 可用!腾讯出品的 AIGC 交互对话组件,免费开源、包含设计资源
  • MyBatis入门指南
  • Java微服务架构实战:Spring Boot与Spring Cloud的深度整合
  • 代码审查服务费用受哪些因素影响?如何确定合理报价?
  • 66岁华仁世纪集团有限公司创始人、董事长梁福东逝世
  • 讲述“外国货币上的中国故事”,《世界钱币上的中国印记》主题书刊出版发布
  • 减重人生|吃得越少越好?比体重秤上的数字,更有意义的是什么?
  • 莱布雷希特专栏:古典乐坛边缘人
  • 中方是否担忧美国主权信用评级下调?外交部:美国应采取负责任的政策措施
  • 新任重庆市垫江县委副书记刘振已任县政府党组书记