2016-09-15 41 views
1

可用的功能指定索引後弦位置的任何功能:是否有可用來查找Postgres的PostgreSQL中

strpos(string, substring) 

如:

strpos('my name is database', 'm') 

回報:1

我的要求是,返回指定索引後子字符串的位置:

strpos(string, substring, 5) 

如:

strpos('my name is database', 'm', 1) 

應該返回:6

回答

0

STRPOS只接受兩個參數。但是,您可以將調用鏈接到子字符串並輕鬆實現您的目標。

SELECT STRPOS(SUBSTRING('my name is database',2), 'm') 

注意,PostgreSQL的字符串從1開始,而不是0,所以你必須把2,而不是1在上面的查詢。當然,結果是相對於新字符串'y name is database'的,所以你必須在結果中加1。

+0

感謝您的答覆,其工作還可以,但不要我們有一些更簡單的解決方案,使用這種大串使得很多複雜。 就像SQL SERVER中的CHARINDEX一樣。 – Yusuf

+0

很高興有幫助。我想不是,但你可以很快寫出一個存儲的函數來實現這一點。 – e4c5

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; 
相關問題