2012-11-05 100 views
0
create table table1 
(
    column1 varchar2(8) 
    check constraint column1_ch check ........ 
); 

如何檢查數據,前4個字符是最後4個數字的特定字母集合?以及一系列的價值。SQL CHECK CONSTRAINT VARCHAR

例子,數據可以是ABCD2121,ABCD1111。

範圍 - ABCD0001到ABCD9999

所以, 'ABCD',而數字變化是固定的。 。

我在網上foudn有關使用「[]」來定義的數字,但我不能將它融入我的約束

感謝

+1

查找到的子功能或使用正則表達式,如果你的SQL風味允許它 –

回答

1

最簡單的方法就是做這個用正則表達式:

alter table table1 
    add constraint chck_code check (regexp_like(column1, '(ABCD)[0-9]{4}')); 
0

你的檢查條件應如下:

(column1 LIKE 'ABCD[0-9][0-9][0-9][1-9]') 

編輯:修改爲使用一組與前綴的範圍爲字母字符

下面是使用Microsoft SQL Server的解決方案illistrates這樣的:

DECLARE @MyTable TABLE 
(column1 varchar(8) check (column1 LIKE 'ABCD[0-9][0-9][0-9][1-9]')) 

INSERT INTO @MyTable (column1) 
     SELECT 'ABCD0000' 
UNION SELECT 'ABCD2121' 
UNION SELECT 'ABCD1111'; 

SELECT * 
    FROM @MyTable; 

INSERT INTO @MyTable (column1) 
SELECT 'ABCD000A'; --<== Fails! 

INSERT INTO @MyTable (column1) 
SELECT 'ABCD221'; --<== Fails! 
+0

哦,而且也確保你不會也感到驚訝[排序問題](http://msdn.microsoft.com/en-us/library/ms144260.aspx)。 – Alexander

+0

但是,這將允許任何4個字母的前綴 - 這不是OP想要的。 –

+1

LIKE不支持正則表達式(至少不是在標準SQL中,絕對不在Oracle中) –

0

如果你有一組固定的前綴,使用REGEXP_LIKE和枚舉前綴列表:

alter table test_1 
add constraint chk_col1 check(regexp_like(column1, '(ABCD|EFGH)[0-9]{4}')); 

這將允許ABCD和EFGH作爲前綴,後跟正好4位數字。