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

Oracle regexp_instr函数转换为PostgreSQL等效实现方案问询

Oracle到PostgreSQL 12的函数迁移方案

原Oracle代码的核心逻辑是:从inColumnDdl字符串中,通过不区分大小写的正则表达式regMatch匹配第一个符合条件的子串,截取该子串并转为大写后赋值给varColName。

简洁实现方案(PostgreSQL)

直接使用regexp_match函数获取匹配子串,再转大写即可,这是最贴合需求的简化写法:

varColName := upper((regexp_match(inColumnDdl, regMatch, 'i'))[1]);

逻辑说明

  • regexp_match(inColumnDdl, regMatch, 'i'):执行不区分大小写('i'参数)的正则匹配,返回包含第一个匹配子串的数组。
  • (...)[1]:取出数组中的第一个匹配结果(对应原Oracle逻辑里的第一个匹配项)。
  • upper(...):将匹配到的子串转为大写,和原Oracle逻辑完全一致。

模拟原Oracle位置计算的实现(可选)

如果需要完全复刻原Oracle通过起始/结束位置差截取的逻辑,可以结合regexp_position和length函数实现:

DECLARE
    match_result text[] := regexp_match(inColumnDdl, regMatch, 'i');
    start_pos integer;
BEGIN
    IF match_result IS NOT NULL THEN
        start_pos := regexp_position(inColumnDdl, regMatch, 1, 1, 'i');
        varColName := upper(substr(inColumnDdl, start_pos, length(match_result[1])));
    ELSE
        varColName := NULL; -- 无匹配时的处理逻辑,和原Oracle保持一致
    END IF;
END;

内容的提问来源于stack exchange,提问作者Mohamedmehdi Ellouze

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 21:30:53