0

有下一个结构的表

Table tab1
(
range text,
col1 text
)

数据示例:
123,一些文本

1234,一些文字

12345,一些文字

我想通过下一个算法在此表中查找数据我输入字符串以找到最接近的字符串匹配(从字符串的开头)

例如:

'123456789' 应该找到范围为 12345 的行

'123409861' 应该找到范围为 1234 的行

'123609862' 应该找到范围为 123 的行

所以想法是用输入字符串找到包含最多相似符号(从字符串开头)的范围

没有循环的要点(修剪最后一个符号并找到字符串)

我当前的代码:

DECLARE v_string text default p_string; -- p_string - input param
DECLARE v_row_cnt int default 0;

BEGIN
    
    DROP TABLE IF EXISTS tmp;
    CREATE TEMP TABLE tmp
    (
        "range" varchar(15),
        col1 text
    );

    LOOP
        INSERT INTO tmp
        SELECT
            "range", 
            col1
        FROM tab1
        WHERE "range" = v_string;
    
        GET DIAGNOSTICS v_row_cnt = ROW_COUNT;
    
        IF v_row_cnt = 0 AND v_string <> '' THEN 
            v_string := substr(v_string, 1, length(v_string) - 1);
        ELSE 
            exit;
        END IF;

    END LOOP;

    RETURN QUERY
    SELECT
        "range", 
        col1
    FROM tmp;

END
4

0 回答 0