MySQL字符串数字提取全攻略:从基础函数到正则表达式实战
1. 项目概述从混乱中提取秩序在数据处理的日常工作中我们经常会遇到一种让人头疼的情况一个字段里数字、文字、符号全都混在一起。比如从商品描述“iPhone 14 Pro Max 256GB 深空黑色”里提取出价格“9999”或者从日志条目“ErrorCode: 404, Time: 2023-10-27 15:30:22”里单独拿出错误码“404”。更常见的是用户输入的地址、订单备注、爬虫抓来的原始文本里面需要的数字信息总是被各种非数字字符包裹着。手动处理面对成千上万条数据这无异于大海捞针。这时直接在数据库层面用SQL语句从字符串中精准地“挖”出数字就成了数据清洗和预处理中一项非常核心且高频的技能。对于使用MySQL的开发者、数据分析师或运维工程师来说掌握字符串数字提取意味着你能更高效地完成数据标准化、指标计算和报表生成。它不仅仅是写一个正则表达式那么简单背后涉及到MySQL字符串函数的灵活运用、对数据模式的深刻理解以及在不同性能要求下的方案选型。今天我们就来彻底拆解这个主题从基础函数到高阶技巧从简单场景到复杂模式手把手带你掌握在MySQL中从字符串提取数字的“十八般武艺”。无论你是刚刚接触SQL的新手还是希望优化现有脚本的老手相信这篇深入浅出的总结都能给你带来直接的帮助。2. 核心思路与方案选型为什么不用正则当接到“从字符串提取数字”这个任务时很多人的第一反应可能是正则表达式。的确正则功能强大模式匹配能力无与伦比。但在MySQL的语境下尤其是在8.0版本之前情况有些特殊。MySQL在8.0版本才正式引入了原生的REGEXP_REPLACE、REGEXP_SUBSTR等正则函数在这之前内置的字符串处理函数并不直接支持正则表达式。因此我们的方案选型需要根据MySQL的版本来决定核心思路是利用内置的字符串函数进行“拼装”模拟出提取逻辑。2.1 方案选型的核心考量为什么我们要大费周章地用基础函数去“拼装”而不是坐等升级到8.0用正则这里有三个关键考量环境兼容性大量的生产环境、遗留系统可能仍在使用MySQL 5.6或5.7版本。为了脚本的普适性和可移植性掌握一套不依赖正则的通用方法至关重要。性能与可控性即使是MySQL 8.0复杂的正则表达式也可能带来性能开销。对于模式相对固定、结构清晰的字符串使用优化过的内置函数组合其执行效率往往更高且逻辑更直观易于调试和维护。理解底层逻辑通过拆解问题并使用基础函数解决能加深我们对字符串处理、字符集和函数嵌套的理解这是成为SQL高手的必经之路。因此我们的核心思路是将字符串视为一个字符序列遍历或筛选出其中所有属于数字0-9的字符然后将它们重新拼接成一个新的数字字符串。如果字符串中有多个数字片段如“abc123def456”我们还需要决定是提取第一个、最后一个还是全部合并。2.2 常用函数工具箱在开始构建方案前我们先熟悉一下MySQL中即将用到的几个核心字符串函数LENGTH(str)/CHAR_LENGTH(str)返回字符串的字节长度/字符长度。对于中文等多字节字符两者结果不同提取数字时通常用CHAR_LENGTH。SUBSTRING(str, pos, len)/MID(str, pos, len)从字符串str的第pos个位置开始截取长度为len的子串。这是我们的“手术刀”。CONCAT(str1, str2, ...)将多个字符串连接成一个字符串。这是我们的“粘合剂”。REPLACE(str, from_str, to_str)将字符串str中所有的from_str替换为to_str。常用来“剔除”非数字字符。ASCII(char)返回字符的ASCII码值。可以用来判断一个字符是否为数字数字0-9的ASCII码是48-57。IF(expr, true_val, false_val)/CASE WHEN条件判断用于在遍历字符时做决策。CAST(expr AS type)转换数据类型例如将提取出的数字字符串转为INT或DECIMAL。对于MySQL 8.0的用户可以额外使用REGEXP_REPLACE(str, pattern, replacement)使用正则表达式进行替换。REGEXP_SUBSTR(str, pattern)使用正则表达式提取子串。接下来我们将从易到难构建几种典型的提取方案。3. 基础方案解析从简单替换到循环遍历3.1 方案一使用REPLACE函数暴力剔除适用于纯数字分离场景这是最直观但也是限制最多的方法。核心思想是既然我们只想要数字那就把字符串中所有非数字的字符全部替换掉比如替换为空字符串。假设我们有一张商品临时描述表temp_productsCREATE TABLE temp_products ( id INT, description VARCHAR(100) ); INSERT INTO temp_products VALUES (1, 型号: iPhone14 价格: 6999元), (2, 库存量: 150台), (3, 版本号v2.3.1);如果我们知道数字只和中文、字母相邻可以尝试SELECT description, REPLACE(REPLACE(REPLACE(description, 元, ), 台, ), 价格: , ) as naive_clean FROM temp_products;结果会接近但非常笨拙且不通用。对于复杂字符串这种方法很快会陷入无穷无尽的REPLACE嵌套中且极易出错。注意事项此方法仅在你非常清楚要去除的固定且有限的非数字字符集时才有效。对于动态、未知的字符串绝不推荐。3.2 方案二使用递归或循环遍历通用性强理解关键这是实现“通用数字提取”的核心逻辑尤其适用于MySQL 5.x版本。我们需要构造一个过程能够检查字符串中的每一个字符。思路如下获取原始字符串的长度。从第1位开始循环到字符串末尾。在循环中取出当前位置的单个字符。判断该字符的ASCII码是否在48(‘0’)到57(‘9’)之间或者直接判断字符是否在‘0’到‘9’范围内。如果是数字则将它拼接到结果字符串中如果不是则跳过。循环结束得到的就是所有数字字符拼接的结果。在MySQL中我们可以通过自定义函数、或者利用WITH RECURSIVEMySQL 8.0或连接一张足够大的序列表来模拟循环。这里给出一个使用WITH RECURSIVE的示例MySQL 8.0WITH RECURSIVE cte AS ( SELECT description, 1 AS pos, AS extracted_num -- 初始化一个空字符串存放结果 FROM temp_products UNION ALL SELECT description, pos 1, CONCAT( extracted_num, CASE WHEN SUBSTRING(description, pos, 1) BETWEEN 0 AND 9 THEN SUBSTRING(description, pos, 1) ELSE END ) FROM cte WHERE pos CHAR_LENGTH(description) ) SELECT description, MAX(extracted_num) AS all_numbers -- 取循环结束后的最终结果 FROM cte GROUP BY description;这个查询会为每个description生成一个数字字符串。对于‘型号: iPhone14 价格: 6999元’最终extracted_num将是‘146999’。实操心得这种方法虽然通用但性能是最大的考量点。递归CTE或连接大表对长字符串或大数据集进行逐字符扫描开销非常大。它更适合在数据清洗阶段对少量关键字段进行一次性处理绝不适合在高频查询的WHERE条件或JOIN中使用。3.3 方案三利用序列表辅助平衡性能与通用性如果环境中没有递归CTE可以预先创建一张数字序列表例如seq_1_to_1000包含1到1000的数字利用它来拆解字符串。逻辑与递归类似但可能效率稍好因为避免了递归的层层开销。-- 假设存在一个名为 numbers 的表其中有一个整数列 n (值从1到足够大比如1000) SELECT t.description, GROUP_CONCAT( CASE WHEN SUBSTRING(t.description, n.n, 1) BETWEEN 0 AND 9 THEN SUBSTRING(t.description, n.n, 1) ELSE END ORDER BY n.n SEPARATOR ) AS extracted_num FROM temp_products t CROSS JOIN numbers n WHERE n.n CHAR_LENGTH(t.description) GROUP BY t.description;这里GROUP_CONCAT配合ORDER BY和SEPARATOR 实现了将分散的数字字符按原顺序重新拼接。4. 进阶方案与MySQL 8.0的正则利器4.1 方案四MySQL 8.0 正则表达式降维打击如果你使用的是MySQL 8.0或更高版本那么恭喜你处理这类问题将变得异常优雅和强大。REGEXP_REPLACE函数可以直接实现我们梦寐以求的功能用正则匹配所有非数字字符并将其替换为空。SELECT description, REGEXP_REPLACE(description, [^0-9], ) AS extracted_num FROM temp_products;一句简单的[^0-9]匹配任何非数字字符就完成了所有工作。结果与循环遍历方案一致。更进一步如果你只想提取字符串中第一个连续出现的数字串可以使用REGEXP_SUBSTR。SELECT description, REGEXP_SUBSTR(description, [0-9]) AS first_number FROM temp_products;对于‘型号: iPhone14 价格: 6999元’first_number将是‘14’匹配到‘iPhone’后面的‘14’。4.2 方案五提取特定位置的数字如价格、版本号很多时候数字在字符串中的位置是有规律的。例如价格总是在“价格”后面版本号总是在“v”后面。这时我们可以结合SUBSTRING_INDEX和LOCATE等函数进行精确定位。假设我们只想提取“价格: ”后面的数字SELECT description, -- 1. 找到‘价格: ’的位置 -- 2. 截取从这个位置之后开始的子串 -- 3. 从这个子串中提取第一个连续的数字块 REGEXP_SUBSTR( SUBSTRING(description, LOCATE(价格: , description) CHAR_LENGTH(价格: )), [0-9] ) AS price_number FROM temp_products WHERE description LIKE %价格:%; -- 先过滤出包含价格的行这种方法结合了模式匹配和位置查找在数据格式相对规整时比单纯的正则全局替换更加精准高效。5. 性能优化与实战避坑指南掌握了方法不等于就能在生产环境中随意使用。性能、边界情况和数据质量是必须面对的挑战。5.1 性能对比与选型建议REPLACE链仅适用于模式极其固定、字符集极小的场景。不推荐作为通用解决方案。循环/递归遍历通用性最强但性能最差。数据量大或字符串长时可能导致查询超时或数据库负载过高。仅适用于低频、离线的数据清洗任务。序列表辅助比纯递归稍好但依然属于“暴力破解”性能瓶颈在于笛卡尔积和字符串扫描。需要确保序列表足够大。MySQL 8.0 正则函数首选方案。语法简洁意图清晰并且MySQL引擎对正则进行了优化在大多数场景下性能优于自建的循环逻辑。对于简单模式如[^0-9]效率非常高。选型口诀能用正则8.0就不用循环格式固定就优先定位截取离线任务可接受循环在线查询务必优化。5.2 常见问题与排查技巧实录在实际操作中你肯定会遇到下面这些问题问题1提取出的数字字符串如何转换成数值类型进行计算直接提取的结果是VARCHAR类型。使用CAST或CONVERT函数并注意处理可能的空字符串或非数字情况。SELECT extracted_num, CAST(NULLIF(extracted_num, ) AS UNSIGNED) AS price_int -- 空字符串转为NULL再转INT FROM ( -- 这里是你的提取逻辑例如 SELECT REGEXP_REPLACE(description, [^0-9], ) AS extracted_num FROM temp_products ) t;注意如果提取出的数字字符串非常长超过BIGINT范围或者包含前导零如‘00123’转换时需要格外小心。考虑使用DECIMAL类型或保留字符串格式。问题2字符串中有多个数字片段但我只想提取其中一个如第二个正则表达式REGEXP_SUBSTR在MySQL 8.0中可以通过参数指定匹配的第几个出现项。SELECT description, REGEXP_SUBSTR(description, [0-9], 1, 2) AS second_number -- 从第1个字符开始找第2个匹配 FROM temp_products;对于更低的版本可能需要借助更复杂的子查询或字符串分割技巧复杂度激增。问题3提取包含小数点的数字如价格“99.99”修改正则表达式模式即可。-- 匹配数字、小数点和小数部分 SELECT REGEXP_REPLACE(description, [^0-9.], ) AS decimal_num FROM ...; -- 或者更精确地匹配小数格式 SELECT REGEXP_SUBSTR(description, [0-9]\\.[0-9]) AS precise_decimal FROM ...;重要提示全局替换非数字和小数点可能会意外保留其他用途的句点如省略号。因此REGEXP_SUBSTR匹配特定模式通常是更安全的选择。问题4处理中文字符或特殊字符集时出错确保你的数据库、表和连接字符集设置正确如utf8mb4。使用CHAR_LENGTH而不是LENGTH来获取字符长度。某些特殊全角数字或罗马数字可能不会被BETWEEN 0 AND 9或[0-9]匹配需要根据实际情况调整判断逻辑。问题5查询速度慢得无法接受建立预处理字段如果源数据更新不频繁但查询频繁最好的办法是在数据写入或更新时就通过触发器或应用层逻辑将提取好的数字存入一个单独的、索引好的字段中。这是根本性的性能优化。减少处理数据量在应用REGEXP_REPLACE等函数前先用简单的LIKE条件过滤掉明显不包含数字的行。避免在WHERE或JOIN中使用在WHERE extracted_num 100这样的条件中MySQL通常需要先为每一行执行提取函数再进行比较无法使用索引。务必先提取到中间表或变量中。6. 完整实战案例清洗订单备注中的手机号假设我们有一张订单表ordersremark字段中杂乱地记录了用户留言我们需要从中提取出手机号码11位连续数字。-- 创建示例数据 CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_name VARCHAR(50), remark TEXT ); INSERT INTO orders VALUES (1, 张三, 尽快发货电话13800138000谢谢), (2, 李四, 收货人电话13912345678地址...), (3, 王五, 我需要发票联系方式是137-5555-6666), (4, 赵六, 请周末配送); -- 使用MySQL 8.0正则匹配11位连续数字 SELECT order_id, customer_name, remark, REGEXP_SUBSTR(remark, [0-9]{11}) AS extracted_phone FROM orders; -- 结果 -- order_id | customer_name | remark | extracted_phone -- 1 | 张三 | 尽快发货电话13800138000谢谢 | 13800138000 -- 2 | 李四 | 收货人电话13912345678地址... | 13912345678 -- 3 | 王五 | 我需要发票联系方式是137-5555-6666 | NULL (因为被‘-’隔开) -- 4 | 赵六 | 请周末配送 | NULL案例中第三个订单的手机号被分隔符隔开简单的{11}模式无法匹配。这时我们需要先移除常见分隔符再匹配11位数字。SELECT order_id, customer_name, remark, REGEXP_SUBSTR( REGEXP_REPLACE(remark, [\\-\\s\\(\\)], ), -- 先移除‘-’、空格、括号等 [0-9]{11} ) AS cleaned_phone FROM orders;这个案例展示了在实际业务中数据清洗往往需要多层处理逻辑的叠加。没有一劳永逸的单一模式理解数据、分步处理、持续验证才是关键。7. 总结与个人经验体会从字符串中提取数字这个看似简单的需求贯穿了数据生命周期的各个环节。通过上面的梳理我们可以看到从最基础的函数组合到递归循环的通用解法再到MySQL 8.0正则表达式的优雅实现每一种方法都有其适用场景和代价。我个人在实际项目中最深刻的体会是**“先分析后动手”**。不要一上来就写复杂的正则或循环。首先花时间抽样查看数据了解数字出现的模式是总是出现在特定关键词后吗是连续的吗包含小数或负数吗有其他干扰字符吗其次评估数据量和性能要求是用于一次性的报表还是需要实时响应的API查询最后再根据MySQL版本选择最合适的技术方案。对于MySQL 8.0以下的环境自定义函数封装上述循环逻辑是一个不错的选择可以提高代码复用性。但务必在函数注释中明确其性能风险。对于8.0的环境大胆使用REGEXP_REPLACE和REGEXP_SUBSTR它们会让你的SQL代码既简洁又强大。最后永远不要忘记数据质量的源头治理。如果可能推动业务系统在录入时就将数字字段独立出来这比任何事后提取技巧都更高效、更可靠。字符串数字提取终究是应对“历史遗留问题”和“外部脏数据”的利器而非设计新系统时的首选方案。

相关新闻

MySQL字符串数字提取实战:从正则到自定义函数的完整方案

MySQL字符串数字提取实战:从正则到自定义函数的完整方案

1. 项目概述:从混乱中提取秩序在数据处理的日常里,我们经常会遇到一些“不守规矩”的字段。比如,一个商品编码被存成了“SKU-2024-001A”,一个用户手机号被记录为“联系电话:13800138000(备用)”…

2026/8/26 11:56:59 阅读更多 →
蓝桥杯Java A组国赛真题:工程能力的实战标尺

蓝桥杯Java A组国赛真题:工程能力的实战标尺

1. 这份真题卷到底值不值得花时间刷?——一个带过5届蓝桥杯Java组选手的老带教说点实在话 “第十三届蓝桥杯决赛(国赛)真题 Java A 组【原卷】”——光看标题,很多刚接触竞赛的同学第一反应是:这不就是一份PDF吗&#…

2026/8/26 11:56:59 阅读更多 →
KitBash3D Cargo插件:无缝集成UE与3D资产库的一键导入方案

KitBash3D Cargo插件:无缝集成UE与3D资产库的一键导入方案

1. 从资源库到引擎:KitBash3D Cargo插件的价值定位如果你是一名UE(Unreal Engine)开发者,无论是做游戏、影视动画还是建筑可视化,大概率都经历过一个痛苦的过程:为了一个场景,满世界找模型&…

2026/8/26 11:55:56 阅读更多 →

最新新闻

Pascal Editor:用TypeScript在浏览器中实现3D建筑设计的开源利器

Pascal Editor:用TypeScript在浏览器中实现3D建筑设计的开源利器

简介:浏览器早已不只是内容展示的容器,在WebGL、WebWorker等技术的推动下,它正成为承载复杂应用的操作系统级平台。对于3D建筑设计这类重交互、高算力的场景,传统客户端软件存在安装繁琐、跨端协同困难、扩展封闭等痛点。TypeScri…

2026/8/26 12:25:51 阅读更多 →
从竞赛到实践:基于OpenCV的果园苹果识别与成熟度分级全流程解析

从竞赛到实践:基于OpenCV的果园苹果识别与成熟度分级全流程解析

1. 项目背景与核心挑战:从竞赛题目到工程实践 去年年底,我带着几个学生组队参加了亚太杯数学建模竞赛,A题“果园采摘机器人的图像识别”给我们留下了深刻的印象。这道题之所以吸引我,是因为它完美地戳中了当前智能农业领域的一个核…

2026/8/26 12:25:51 阅读更多 →
SAP固定资产底表深度解析:ANLA、ANEP、ANLC核心逻辑与实战避坑指南

SAP固定资产底表深度解析:ANLA、ANEP、ANLC核心逻辑与实战避坑指南

1. 为什么“SAP固定资产底表”是FICO模块里最常被问、却最少被讲透的硬骨头?在SAP FICO实施和运维现场,我见过太多人卡在一个看似简单的问题上:“怎么查到某台设备的真实购置日期、累计折旧额、当前净值,而且要能和财务凭证对得上…

2026/8/26 12:25:51 阅读更多 →
嵌入式ARM设备交叉编译Valgrind实战指南

嵌入式ARM设备交叉编译Valgrind实战指南

1. 为什么非得在嵌入式设备上跑 valgrind?——从一次内存泄漏排查失败说起 我第一次在 ARM 设备上调试一个持续运行三个月就崩溃的守护进程时,手边只有串口和日志。 dmesg 显示 Out of memory: Kill process XXX (xxx) score XXX or sacrifice child …

2026/8/26 12:25:51 阅读更多 →
PCB安规设计:电气间隙与爬电距离实战指南

PCB安规设计:电气间隙与爬电距离实战指南

1. 这不是教科书里的概念,是焊在板子上的安全底线 你画完一张PCB,跑通功能、测完信号、调好电源,兴冲冲送去打样——结果安规测试卡在“输入-输出”之间,电气间隙实测4.2mm,标准要求4.5mm;或者爬电距离被PC…

2026/8/26 12:25:51 阅读更多 →
基于LangChain与RAG技术构建智能穿搭推荐系统

基于LangChain与RAG技术构建智能穿搭推荐系统

1. 从“衣橱焦虑”到“智能衣答”:一个真实的需求场景每天早上站在衣橱前,看着满柜子的衣服却不知道穿什么,这种“衣橱焦虑”相信很多人都经历过。衬衫、裤子、裙子、外套,单品不少,但怎么搭配才好看?这件去…

2026/8/26 12:24:50 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →