2017-05-11 122 views
2

我需要的Postgres相當於SQL函數patindexSQL PATINDEX等同於PostgreSQL的

+3

的Postgres提供了完整的支持正則表達式。它比SQL Server的'patindex()'更強大,更標準。 –

+0

沒有直接等同於'patindex'(儘管可以很容易地編寫它)。但是,如果您向我們展示原始查詢,可能在Postgres中有更好的選擇(正如Gordon所說:Postgres的正則表達式支持比SQL Server的更復雜) –

+0

我想要一個帶有SQL名稱和功能的Postgres函數「 Patindex「功能。我正在將SQL查詢轉換爲Postgres等效的,所以如果我在SQl中遇到Patindex中的函數,我希望在Postgres中也可以使用相同的函數 – Priya

回答

1

的沒有完全等效於SQL Server的PATINDEX函數。您可以根據需要使用其他字符串函數。下面是文檔:https://www.postgresql.org/docs/current/static/functions-string.html

但是如果你需要完全一樣的功能,你可以寫一個 「包裝」,如下圖所示:

CREATE OR REPLACE FUNCTION "patindex"("pattern" VARCHAR, "expression" VARCHAR) RETURNS INT AS $BODY$ 
SELECT 
    COALESCE(
     STRPOS(
      $2 
      ,(
       SELECT 
        (REGEXP_MATCHES(
         $2 
         ,'(' || REPLACE(REPLACE(TRIM($1, '%'), '%', '.*?'), '_', '.') || ')' 
        ))[ 1 ] 
       LIMIT 1 
      ) 
     ) 
     ,0 
    ) 
; 
$BODY$ LANGUAGE 'sql' IMMUTABLE; 

例子:

SELECT patindex('%e_t%', 'Test String'); 
SELECT patindex('%S_r%', 'Test String'); 
SELECT patindex('%x%', 'Test String');