You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MySQL数据库中检索加粗内容匹配'axy'的行?

MySQL检索加粗文本组合匹配指定内容的行

需求:从字段包含HTML <strong>标签的数据表中,筛选出所有<strong>包裹的文本拼接后等于axy的行。

方法一:MySQL 8.0+ 原生正则函数实现

利用REGEXP_REPLACE函数先提取所有<strong>标签内的内容,拼接后进行匹配:

SELECT *
FROM your_table
WHERE REGEXP_REPLACE(
    -- 仅保留所有<strong>...</strong>片段
    REGEXP_REPLACE(content, '.*?(<strong>.*?</strong>)|.*', '$1', 1, 0, 's'),
    -- 移除所有<strong>和</strong>标签
    '<\/?strong>', ''
) = 'axy';

语句说明

  1. 内层REGEXP_REPLACE:遍历字段内容,只保留所有<strong>标签包裹的片段,其余内容全部清除。's'参数让.可以匹配换行符(适配字段包含换行的场景)。
  2. 外层REGEXP_REPLACE:移除残留的<strong>和</strong>标签,得到所有加粗文本的拼接结果。
  3. 最后判断拼接结果是否等于axy,筛选符合条件的行。

方法二:适配MySQL 5.x版本(自定义函数)

如果你的MySQL版本低于8.0,没有正则替换函数,可以自定义一个函数来提取并拼接加粗文本:

DELIMITER //
CREATE FUNCTION extract_bold_text(input TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
    DECLARE result TEXT DEFAULT '';
    DECLARE start_pos INT;
    DECLARE end_pos INT;
    DECLARE bold_text TEXT;
    
    SET start_pos = LOCATE('<strong>', input);
    WHILE start_pos > 0 DO
        SET end_pos = LOCATE('</strong>', input, start_pos + 8);
        IF end_pos > 0 THEN
            -- 提取<strong>和</strong>之间的文本
            SET bold_text = SUBSTRING(input, start_pos + 8, end_pos - start_pos - 8);
            SET result = CONCAT(result, bold_text);
            -- 截取剩余未处理的内容
            SET input = SUBSTRING(input, end_pos + 9);
        ELSE
            SET start_pos = 0;
        END IF;
        SET start_pos = LOCATE('<strong>', input);
    END WHILE;
    
    RETURN result;
END //
DELIMITER ;

创建函数后,直接调用函数查询:

SELECT *
FROM your_table
WHERE extract_bold_text(content) = 'axy';

函数说明

循环查找字段中的<strong>标签,提取每个标签内的文本并拼接,直到处理完所有标签,最终返回拼接后的加粗文本,再与目标内容匹配。

内容的提问来源于stack exchange,提问作者H.R Sh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:10:50