您好,登錄后才能下訂單哦!
Oracle Study之--Oracle正則表達式
案例要求:
建立check constraint ,要求字段輸入內容必須是“00[number][number][a-z]”:
通過正則表達式建立如下約束(constraint):
17:20:13 SCOTT@ prod >desc card
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
ID NOT NULL VARCHAR2(10)
17:22:53 SCOTT@ prod >
17:19:05 SCOTT@ prod >alter table card drop constraint card_ck;
Table altered.
建立正則表達式:
17:19:19 SCOTT@ prod >alter table card add constraint card_ck check (REGEXP_LIKE(id,'00[[:digit:]]{2}[[:lower:]]{1}'));
Table altered.
Elapsed: 00:00:00.06
測試:
17:19:33 SCOTT@ prod >insert into card values ('0055a');
1 row created.
Elapsed: 00:00:00.01
17:19:50 SCOTT@ prod >insert into card values ('0065z');
1 row created.
Elapsed: 00:00:00.00
17:20:04 SCOTT@ prod >insert into card values ('1188a');
insert into card values ('1188a')
*
ERROR at line 1:
ORA-02290: check constraint (SCOTT.CARD_CK) violated
Elapsed: 00:00:00.01
正則表達式說明:
表 5:REGEXP_LIKE 操作符
語法 | 說明 |
REGEXP_LIKE(source_string, pattern [, match_parameter]) | source_string 支持字符數據類型(CHAR、VARCHAR2、CLOB、NCHAR、NVARCHAR2 和 NCLOB,但不包括 LONG)。pattern 參數是正則表達式的另一個名稱。match_parameter 允許可選的參數(如處理換行符、保留多行格式化以及提供對區分大小寫的控制)。 |
表 1:定位元字符
元字符 | 說明 |
^ | 使表達式定位至一行的開頭 |
$ | 使表達式定位至一行的末尾 |
表 2:量詞或重復操作符
量詞 | 說明 |
* | 匹配 0 次或更多次 |
? | 匹配 0 次或 1 次 |
+ | 匹配 1 次或更多次 |
{m} | 正好匹配 m 次 |
{m,} | 至少匹配 m 次 |
{m, n} | 至少匹配 m 次但不超過 n 次 |
表 3:預定義的 POSIX 字符類
字符類 | 說明 |
[:alpha:] | 字母字符 |
[:lower:] | 小寫字母字符 |
[:upper:] | 大寫字母字符 |
[:digit:] | 數字 |
[:alnum:] | 字母數字字符 |
[:space:] | 空白字符(禁止打印),如回車符、換行符、豎直制表符和換頁符 |
[:punct:] | 標點字符 |
[:cntrl:] | 控制字符(禁止打印) |
[:print:] | 可打印字符 |
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。