REGEXP_CONTAINS函數用於判斷一個字串是否包含與指定字串或Regex匹配的內容。
命令格式
BOOLEAN REGEXP_CONTAINS(STRING <source>, STRING <pattern>)參數說明
source:必填。STRING類型。被匹配的字串。
pattern:必填。STRING類型常量或Regex。用於匹配的子字串或Regex。更多Regex編寫規範,請參見Regex規範。
說明您可以使用
^(行首)和$(行尾)搜尋完整匹配項。由於Regex中的運算子存在優先順序,建議使用括弧包裹^和$之間的所有內容,以確保匹配邏輯正確。
傳回值說明
返回BOOLEAN類型。返回規則如下:
若source值包含與pattern匹配的內容,返回true;反之,返回false。
若source或pattern為非STRING類型或無效,返回報錯。
若source或pattern值為NULL,返回NULL。
若pattern為空白字串,返回true。
使用樣本
樣本1:檢查電子郵件是否有效。
SELECT 'foo@example.com' AS email, REGEXP_CONTAINS('foo@example.com', '@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+') AS is_valid;返回結果如下:
+-----------------+----------+ | email | is_valid | +-----------------+----------+ | foo@example.com | true | +-----------------+----------+樣本2:使用
^(行首)和$(行尾)搜尋完整匹配項。由於Regex中的運算子存在優先順序,建議使用括弧包裹
^和$之間的所有內容,以確保匹配邏輯正確。Regex未使用括弧,不影響結果。
SELECT 'a@foo.com' AS email, REGEXP_CONTAINS('a@foo.com', '^([\\w.+-]+@foo\\.com|[\\w.+-]+@bar\\.org)$') AS valid_email_address, REGEXP_CONTAINS('a@foo.com', '^[\\w.+-]+@foo\\.com|[\\w.+-]+@bar\\.org$') AS without_parentheses;返回結果如下:
+------------+---------------------+---------------------+ | email | valid_email_address | without_parentheses | +------------+---------------------+---------------------+ | a@foo.com | true | true | +------------+---------------------+---------------------+Regex未使用括弧,影響輸出結果。
SELECT '!b@bar.org' AS email, REGEXP_CONTAINS('!b@bar.org', '^([\\w.+-]+@foo\\.com|[\\w.+-]+@bar\\.org)$') AS valid_email_address, REGEXP_CONTAINS('!b@bar.org', '^[\\w.+-]+@foo\\.com|[\\w.+-]+@bar\\.org$') AS without_parentheses;返回結果如下:
+------------+---------------------+---------------------+ | email | valid_email_address | without_parentheses | +------------+---------------------+---------------------+ | !b@bar.org | false | true | +------------+---------------------+---------------------+
樣本3:當regexp為空白字串時,返回true。
--返回true WITH dummy AS(SELECT '' AS PATTERN) SELECT REGEXP_CONTAINS('ABC',PATTERN) FROM dummy;
相關函數
REGEXP_CONTAINS函數屬於字串函數,更多尋找字串、轉換字串格式的相關函數請參見字串函數。