如果你有圖案的表,然後:
SQL Fiddle
的Oracle 11g R2架構設置:
CREATE TABLE strings (string) AS
SELECT 'AM_HTCEVOBLKHS_BX' FROM DUAL
UNION ALL SELECT 'AP_HTCEVOBLKHSPBX' FROM DUAL
UNION ALL SELECT 'BM_HTCEVOBLKHS_BX' FROM DUAL
UNION ALL SELECT 'A_HTCEVODSAP_DSSD' FROM DUAL
UNION ALL SELECT 'A_HTCEVOB_A_CDSED' FROM DUAL
UNION ALL SELECT 'MP_HTCEVOBLKHS_BX' FROM DUAL;
CREATE TABLE patterns (pattern) AS
SELECT '^AM' FROM DUAL
UNION ALL SELECT '^AP' FROM DUAL;
查詢1:
-- Negative Matches:
SELECT string
FROM strings s
LEFT OUTER JOIN
patterns p
ON (REGEXP_LIKE(string, pattern))
WHERE p.pattern IS NULL
Results:
| STRING |
|-------------------|
| BM_HTCEVOBLKHS_BX |
| A_HTCEVODSAP_DSSD |
| A_HTCEVOB_A_CDSED |
| MP_HTCEVOBLKHS_BX |
查詢2:
-- Positive Matches:
SELECT DISTINCT
string
FROM strings s
INNER JOIN
patterns p
ON (REGEXP_LIKE(string, pattern))
Results:
| STRING |
|-------------------|
| AM_HTCEVOBLKHS_BX |
| AP_HTCEVOBLKHSPBX |
查詢3:
-- All Matches:
SELECT string,
CASE WHEN REGEXP_LIKE(string,
(SELECT LISTAGG(pattern, '|') WITHIN GROUP (ORDER BY NULL)
FROM patterns)
)
THEN 'True'
ELSE 'False'
END AS Matched
FROM strings s
Results:
| STRING | MATCHED |
|-------------------|---------|
| AM_HTCEVOBLKHS_BX | True |
| AP_HTCEVOBLKHSPBX | True |
| BM_HTCEVOBLKHS_BX | False |
| A_HTCEVODSAP_DSSD | False |
| A_HTCEVOB_A_CDSED | False |
| MP_HTCEVOBLKHS_BX | False |
如果你想通過圖案爲一個字符串,然後:
查詢4:
-- Negative Matches:
SELECT string
FROM strings
WHERE NOT REGEXP_LIKE(string, '^(AM|AP)')
Results:
| STRING |
|-------------------|
| BM_HTCEVOBLKHS_BX |
| A_HTCEVODSAP_DSSD |
| A_HTCEVOB_A_CDSED |
| MP_HTCEVOBLKHS_BX |
查詢5:
-- Positive Matches:
SELECT string
FROM strings
WHERE REGEXP_LIKE(string, '^(AM|AP)')
Results:
| STRING |
|-------------------|
| AM_HTCEVOBLKHS_BX |
| AP_HTCEVOBLKHSPBX |
查詢6:
-- All Matches:
SELECT string,
CASE WHEN REGEXP_LIKE(string, '^(AM|AP)')
THEN 'True'
ELSE 'False'
END AS Matched
FROM strings
Results:
| STRING | MATCHED |
|-------------------|---------|
| AM_HTCEVOBLKHS_BX | True |
| AP_HTCEVOBLKHSPBX | True |
| BM_HTCEVOBLKHS_BX | False |
| A_HTCEVODSAP_DSSD | False |
| A_HTCEVOB_A_CDSED | False |
| MP_HTCEVOBLKHS_BX | False |
請問什麼是 '?!'意思?謝謝 – Frank
@Frank:'(?!..)'是一個負面的前瞻,意思是「不跟隨」,但我已經刪除它,因爲PLSQL似乎不支持這個功能。刷新你的頁面。 –
它不工作,我測試了'D_HTCEVOBLKHS_BX''AD_HTCEVOBLKHS_BX',它應該返回true,但都返回false。 – Frank