碼上快樂
1秒登錄
首頁
榜單
標簽
關於
搜索
相關內容
簡體
繁體
PostgreSQL模仿Oracle的instr函數
本文轉載自
查看原文
2016-11-20 21:45
1631
oracle
/
postgresql
/
instr
--
-- instr functions that mimic Oracle's counterpart
-- Syntax: instr(string1, string2, [n], [m]) where [] denotes optional parameters.
--
-- Searches string1 beginning at the nth character for the mth occurrence
-- of string2. If n is negative, search backwards. If m is not passed,
-- assume 1 (search starts at first character).
--
CREATE
FUNCTION instr(
varchar,
varchar)
RETURNS
integer
AS $$
DECLARE
pos
integer;
BEGIN
pos:= instr($1, $2, 1);
RETURN pos;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
CREATE
FUNCTION instr(string
varchar, string_to_search
varchar, beg_index
integer)
RETURNS
integer
AS $$
DECLARE
pos
integer
NOT
NULL
DEFAULT 0;
temp_str
varchar;
beg
integer;
length
integer;
ss_length
integer;
BEGIN
IF beg_index > 0
THEN
temp_str :=
substring(string
FROM beg_index);
pos := position(string_to_search
IN temp_str);
IF pos = 0
THEN
RETURN 0;
ELSE
RETURN pos + beg_index - 1;
END IF;
ELSE
ss_length := char_length(string_to_search);
length := char_length(string);
beg := length + beg_index - ss_length + 2;
WHILE beg > 0 LOOP
temp_str :=
substring(string
FROM beg
FOR ss_length);
pos := position(string_to_search
IN temp_str);
IF pos > 0
THEN
RETURN beg;
END IF;
beg := beg - 1;
END LOOP;
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
CREATE
FUNCTION instr(string
varchar, string_to_search
varchar,
beg_index
integer, occur_index
integer)
RETURNS
integer
AS $$
DECLARE
pos
integer
NOT
NULL
DEFAULT 0;
occur_number
integer
NOT
NULL
DEFAULT 0;
temp_str
varchar;
beg
integer;
i
integer;
length
integer;
ss_length
integer;
BEGIN
IF beg_index > 0
THEN
beg := beg_index;
temp_str :=
substring(string
FROM beg_index);
FOR i
IN 1..occur_index LOOP
pos := position(string_to_search
IN temp_str);
IF i = 1
THEN
beg := beg + pos - 1;
ELSE
beg := beg + pos;
END IF;
temp_str :=
substring(string
FROM beg + 1);
END LOOP;
IF pos = 0
THEN
RETURN 0;
ELSE
RETURN beg;
END IF;
ELSE
ss_length := char_length(string_to_search);
length := char_length(string);
beg := length + beg_index - ss_length + 2;
WHILE beg > 0 LOOP
temp_str :=
substring(string
FROM beg
FOR ss_length);
pos := position(string_to_search
IN temp_str);
IF pos > 0
THEN
occur_number := occur_number + 1;
IF occur_number = occur_index
THEN
RETURN beg;
END IF;
END IF;
beg := beg - 1;
END LOOP;
RETURN 0;
END IF;
END;
$$ LANGUAGE plpgsql STRICT IMMUTABLE;
×
免責聲明!
本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。
猜您在找
oracle instr函數(oracle 用instr 來代替 like)
Oracle instr函數
Oracle instr() 字符查找函數
Oracle中的substr()函數和INSTR()函數
Oracle中的instr()函數 詳解及應用
INSTR函數
MySQL 的instr函數
SQL instr()函數的格式
oracle截取某個特定字符或者某一段字符之后或者之前的數據(instr函數詳解)
Oracle 正則表達式函數-REGEXP_INSTR 使用例子
粵ICP備18138465號
© 2018-2025 CODEPRJ.COM