将PostgreSQL自定义函数patinde重构适配MySQL技术问询
适配为MySQL版本的函数代码
以下是将你提供的PostgreSQL自定义函数重构后的MySQL版本:
CREATE FUNCTION patinde(pattern VARCHAR(12), expression VARCHAR(12)) RETURNS INT DETERMINISTIC BEGIN DECLARE regex_pattern VARCHAR(255); -- 将PostgreSQL LIKE模式转换为正则表达式 SET regex_pattern = REPLACE(REPLACE(TRIM(BOTH '%' FROM pattern), '%', '.*?'), '_', '.'); -- 添加括号确保匹配完整转换后的模式 SET regex_pattern = CONCAT('(', regex_pattern, ')'); RETURN COALESCE(STRPOS(expression, REGEXP_SUBSTR(expression, regex_pattern)), 0); END;
关键适配说明:
- 函数语法:MySQL自定义函数需使用
BEGIN...END代码块,参数直接使用名称而非$1/$2占位符 - 确定性标记:用
DETERMINISTIC替代PostgreSQL的IMMUTABLE,两者语义一致,均表示输入相同则输出固定 - 正则匹配逻辑:MySQL中用
REGEXP_SUBSTR直接获取第一个匹配子串,替代PostgreSQL里REGEXP_LIKE结合数组取匹配组的写法 - 通用函数兼容:
TRIM、REPLACE、COALESCE、STRPOS这些函数在MySQL和PostgreSQL中的行为基本一致,无需大幅修改
内容的提问来源于stack exchange,提问作者Efrain Mejia
相关产品推荐
相关产品推荐

