兩個選項:
CHECK (REGEXP_LIKE(foo, '[^,.!£$*<>"=]{4}'))
將接受不包含,.!£$*<>"=
CHECK (REGEXP_LIKE(bar, '[a-zA-Z0-9]{4}'))
將接受所有所有4個字符的字符串4-CHA racter串僅包含a-zA-Z0-9
(如果你想比串,其是小於或等於在長度爲4個字符以下則可通過{0,4}
取代{4}
)
SQL Fiddle
的Oracle 11g R2架構設置:
CREATE TABLE test (
foo CHAR(4) NOT NULL,
bar CHAR(4) NOT NULL,
CONSTRAINT chk_foo CHECK (REGEXP_LIKE(foo, '[^,.!£$*<>"=]{4}')),
CONSTRAINT chk_bar CHECK (REGEXP_LIKE(bar, '[a-zA-Z0-9]{4}'))
);
查詢1:
INSERT INTO test VALUES ('AAAA', '"AAA');
結果1:
ORA-02290: check constraint (USER_4_850C2.CHK_BAR) violated : INSERT INTO test VALUES ('AAAA', '"AAA')
查詢2:
INSERT INTO test VALUES ('$AAA', 'AAAA');
結果2:
ORA-02290: check constraint (USER_4_850C2.CHK_FOO) violated : INSERT INTO test VALUES ('$AAA', 'AAAA')
查詢3:
INSERT INTO test VALUES ('AAAA', 'AAAA')
結果3:
來源
2014-01-26 23:28:55
MT0
請你能不能解釋一下,正則表達式做什麼? –
'\ w'與'[[:alnum:] _]'相同,並且將允許字母數字字符AND下劃線([see here](http://docs.oracle.com/cd/B28359_01/appdev。 111/b28424/adfns_regexp.htm#CHDGHBHF))。如果你只是想要字母數字字符,那麼你需要使用'[[:alnum:]]或'[a-zA-Z0-9]'。 '{4}'表示前一次匹配重複總共4次,'^'和'$'是分別匹配字符串開始和結束的邊界匹配(但是如果您有一列是CHAR (4)'那麼這些邊界匹配是不必要的)。 – MT0