可用的功能指定索引後弦位置的任何功能:是否有可用來查找Postgres的PostgreSQL中
strpos(string, substring)
如:
strpos('my name is database', 'm')
回報:1
我的要求是,返回指定索引後子字符串的位置:
strpos(string, substring, 5)
如:
strpos('my name is database', 'm', 1)
應該返回:6
可用的功能指定索引後弦位置的任何功能:是否有可用來查找Postgres的PostgreSQL中
strpos(string, substring)
如:
strpos('my name is database', 'm')
回報:1
我的要求是,返回指定索引後子字符串的位置:
strpos(string, substring, 5)
如:
strpos('my name is database', 'm', 1)
應該返回:6
STRPOS只接受兩個參數。但是,您可以將調用鏈接到子字符串並輕鬆實現您的目標。
SELECT STRPOS(SUBSTRING('my name is database',2), 'm')
注意,PostgreSQL的字符串從1開始,而不是0,所以你必須把2,而不是1在上面的查詢。當然,結果是相對於新字符串'y name is database'的,所以你必須在結果中加1。
如果有人正在尋找一個適當的功能
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;
感謝您的答覆,其工作還可以,但不要我們有一些更簡單的解決方案,使用這種大串使得很多複雜。 就像SQL SERVER中的CHARINDEX一樣。 – Yusuf
很高興有幫助。我想不是,但你可以很快寫出一個存儲的函數來實現這一點。 – e4c5