Postgres提供的功能:
strpos(string, substring)
例如:
strpos('my name is database', 'm')
返回:1
我的要求是返回指定索引后的子字符串的位置:
strpos(string, substring, 5)
例如:
strpos('my name is database', 'm', 1)
应该返回:6
答案 0 :(得分:0)
STRPOS只接受两个参数。但是你可以将一个调用链接到子串并轻松实现你的目标。
SELECT STRPOS(SUBSTRING('my name is database',2), 'm')
请注意,postgresql字符串从1开始而不是0,因此您必须在上面的查询中放置2而不是1。当然结果是相对于新字符串'y name is database'所以你必须在结果中加1。
答案 1 :(得分:0)
如果有人正在寻找合适的功能
CREATE OR REPLACE FUNCTION STRPOSWPOS (p_String VARCHAR, p_searchString VARCHAR, p_startIndex INTEGER DEFAULT 0)
RETURNS INT
AS
$BODY$
DECLARE
v_Return INT;
BEGIN
p_String:=LOWER(p_String);
p_searchString:=LOWER(p_searchString);
v_return:=
CASE WHEN STRPOS(SUBSTRING(p_String, p_startIndex), p_searchString) > 0 AND p_startIndex = 0 THEN
STRPOS(SUBSTRING(p_String, p_startIndex), p_searchString)
WHEN STRPOS(SUBSTRING(p_String, p_startIndex), p_searchString) > 0 AND p_startIndex > 0 THEN
STRPOS(SUBSTRING(p_String, p_startIndex), p_searchString) + p_startIndex - 1
ELSE 0
END;
RETURN v_Return;
END;
$BODY$
LANGUAGE plpgsql;