共用方式為


REGEXP_INSTR (Transact-SQL)

適用於: SQL Server 2025 (17.x) Azure SQL Database AzureSQL Managed InstanceSQL database in Microsoft Fabric

根據自變數的值 return_option ,傳回相符子字串的開始或結束位置。

REGEXP_INSTR
(
    string_expression,
    pattern_expression [ , start [ , occurrence [ , return_option [ , flags [ , group ] ] ] ] ]
)

Note

規則運算式可在 Azure SQL 受控執行個體中使用 SQL Server 2025 或一 律up-to日期更新原則

Arguments

string_expression

字元字串的表達式。

可以是字元字串的常數、變數或數據行。

數據類型: charncharvarcharnvarchar

Note

REGEXP_LIKE、 和REGEXP_COUNTREGEXP_INSTR函數支援 string_expression 參數的 LOB 類型 (varchar(max)nvarchar(max)) 最多 2 MB。

pattern_expression

要比對的正則表達式模式。 通常是文字常值。

數據類型: charncharvarcharnvarcharpattern_expression 支援最大字元長度 8,000 個字節。

start

指定搜尋字串內搜尋的起始位置。 Optional. 類型為 intbigint

編號是以 1 為基礎,這表示表達式中的第一個字元是 1 ,而且值必須是 >= 1。 如果啟動表達式小於 1,則傳回錯誤。 如果 start 表示式大於 string_expression長度,則函式會傳 0回 。 預設值為 1

occurrence

表達式(正整數),指定要搜尋或取代來源字串內的模式運算式出現次數。 預設值為 1。 搜尋 string_expression的第一個字元。 若為正整數 n,它會搜尋 nth 從第一個出現 pattern_expression之後的第一個字元開始,依此類推。

return_option

指定是否要傳回相符子字串的開頭或結束位置。 用於 0 開頭和 1 結尾。 預設值是 0。 查詢會傳回任何其他值的錯誤。

flag

一或多個字元,指定用於搜尋相符專案的修飾詞。 類型為 varcharchar,最多 30 個字元。

例如: ims 。 預設值為 c。 如果提供空字串 (' ') ,則會將它視為預設值 ('c')。 提供 c 或任何其他字元表達式。 如果旗標包含多個相互矛盾的字元,則 SQL Server 會使用最後一個字元。

例如,如果您指定 ic regex 會傳回區分大小寫的比對。

如果值包含支援 旗標值所列的字元,查詢會傳回錯誤,如下列範例所示:

Invalid flag provided. '<invalid character>' are not valid flags. Only {c,i,s,m} flags are valid.
支援的旗標值
Flag Description
i 不區分大小寫 (預設值 false
m 多行模式: ^$ 比對開始/結束文字之外,還比對開始/結束文字 (預設值 false
s . 比對 \n (預設值 false
c 區分大小寫 (預設值 true

group

指定要傳回之subexpression的擷取群組 () 會決定string_expression內的位置。 群組是以括弧括住的圖樣片段,可以巢狀化。 群組會依其左括號以圖樣顯示的順序編號。 此值是整數,而且必須 >= 0 且不得大於 pattern_expression中的群組數目。 默認值為 0,表示位置是以符合整個 pattern_expression的字串為基礎。

如果值大於 pattern_expression中的群組數目,函式會傳 0回 。

返回值

Integer.

Examples

尋找第一個子字串的位置,該子字串只包含數據行中的 PRODUCT_DESCRIPTION 數位。

SELECT REGEXP_INSTR(PRODUCT_DESCRIPTION, '\d+')
FROM PRODUCTS;

尋找資料列中a第三個出現字母PRODUCT_NAME的位置(不區分大小寫)。

SELECT REGEXP_INSTR(PRODUCT_NAME, 'a', 1, 3, 0, 'i')
FROM PRODUCTS;

尋找第一個子字串結尾的位置,該 t 子字串開頭為 ,並以 e (區分大小寫) PRODUCT_DESCRIPTION 結尾的數據行。

SELECT REGEXP_INSTR(PRODUCT_DESCRIPTION, 't.*?e', 1, 1, 1)
FROM PRODUCTS;