有下一个结构的表
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