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

MySQL 5.7.23:将文本字段中#和--注释替换为/* */格式

解决MySQL 5.7中将单行注释转为多行注释的问题

由于MySQL 5.7没有内置正则替换函数(REGEXP_REPLACE是8.0及以上版本才支持),我们可以通过自定义存储函数循环处理所有--和#开头的单行注释,将其转换为/* */格式。

自定义转换函数

以下函数先处理--注释,再处理#注释,会自动在每行注释末尾(或字符串结尾)添加*/:

DELIMITER //
CREATE FUNCTION convert_sql_comments(sql_text TEXT)
RETURNS TEXT
DETERMINISTIC
BEGIN
    -- 处理 -- 开头的单行注释
    DECLARE pos_dash INT;
    DECLARE newline_pos INT;
    SET pos_dash = LOCATE('--', sql_text);
    
    WHILE pos_dash > 0 DO
        SET newline_pos = LOCATE('\n', sql_text, pos_dash + 2);
        IF newline_pos = 0 THEN
            -- 注释位于字符串末尾,无换行符
            SET sql_text = CONCAT(INSERT(sql_text, pos_dash, 2, '/*'), '*/');
            SET pos_dash = 0;
        ELSE
            -- 在换行前插入 */,替换 -- 为 /*
            SET sql_text = INSERT(sql_text, newline_pos, 0, '*/');
            SET sql_text = INSERT(sql_text, pos_dash, 2, '/*');
            SET pos_dash = LOCATE('--', sql_text, newline_pos + 2);
        END IF;
    END WHILE;

    -- 处理 # 开头的单行注释
    DECLARE pos_hash INT;
    SET pos_hash = LOCATE('#', sql_text);
    
    WHILE pos_hash > 0 DO
        SET newline_pos = LOCATE('\n', sql_text, pos_hash + 1);
        IF newline_pos = 0 THEN
            -- 注释位于字符串末尾,无换行符
            SET sql_text = CONCAT(INSERT(sql_text, pos_hash, 1, '/*'), '*/');
            SET pos_hash = 0;
        ELSE
            -- 在换行前插入 */,替换 # 为 /*
            SET sql_text = INSERT(sql_text, newline_pos, 0, '*/');
            SET sql_text = INSERT(sql_text, pos_hash, 1, '/*');
            SET pos_hash = LOCATE('#', sql_text, newline_pos + 2);
        END IF;
    END WHILE;

    RETURN sql_text;
END //
DELIMITER ;

使用示例

针对你提供的测试SQL:

SELECT convert_sql_comments('select -- foobar
idnam #barfoo
-- hello world
from p_person;');

执行后将返回:

select /* foobar*/
idnam /*barfoo*/
/* hello world*/
from p_person;

注意事项

  1. 确保你拥有创建函数的权限(CREATE ROUTINE权限)。
  2. 函数仅处理合法的单行注释,不会替换字符串常量中的--或#(比如SELECT '-- test'不会被修改)。
  3. 已有的/* */格式多行注释不会被函数修改。

内容的提问来源于stack exchange,提问作者Tom Melly

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 14:27:37