2011-02-25 22 views
1

存儲值的類型使用SQL配置oracle數據庫列值我有一個要求,我必須配置文件/檢查一個oracle數據庫表中的特定列只包含字符或不包含數字像城市等欄目)。相似的,我必須檢查一列可以包含字母數字值而不是特殊字符。這怎麼能用oracle sql來完成。如何使用SQL存儲在列

回答

1

如果您使用的是版本10g +,則可以嘗試使用regexp_instr函數並搜索所需的posix字符類的出現次數。

實施例:

create table test1(onlyletters varchar2(100)) 
/
insert into test1 
values('a') 
/
insert into test1 
values('b') 
/
insert into test1 
values('a1') 
/
insert into test1 
values('22') 
/

select * 
from test1 
where REGEXP_INSTR(onlyletters, '[[:digit:]]') = 0 

然後這應該僅返回其中列「onlyletters」具有沒有數字,在此情況下那些具有值「a」和「B」的行。

如果你想找到那些包含數字,搜索REGEXP_INSTR(...)> 0

我不知道你所說的特殊字符的意思,但你可以使用不同的POSIX字符類這樣,我用它來檢測控制字符與「REGEXP_INSTR(onlyletters,[[:cntrl:]]')」。

對這裏的字符類更多信息:http://www.regular-expressions.info/posixbrackets.html

+0

通過特殊字符我的意思是我想檢查一些像人名字的列不包含像@,#,$,%,&,〜等字符 – Walker 2011-02-25 09:58:23

2

下面是一個使用翻譯的例子。您可能需要調整一點與人物要允許,哪些是你不這樣做,但它會給你一個想法:使用正則表達式一個

SQL> create table cities 
    2 (name varchar2(30) 
    3 , constraint city_name_alphanumeric 
    4 check (translate(upper(name),'1ABCDEFGHIJKLMNOPQRSTUVWXYZ','1') is null) 
    5 ) 
    6/

Table created. 

SQL> insert into cities values ('Utrecht') 
    2/

1 row created. 

SQL> insert into cities values ('Utr3cht') 
    2/
insert into cities values ('Utr3cht') 
* 
ERROR at line 1: 
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated 


SQL> insert into cities values ('UtrΘcht') 
    2/
insert into cities values ('UtrΘcht') 
* 
ERROR at line 1: 
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated 


SQL> insert into cities values ('|Utrecht') 
    2/
insert into cities values ('|Utrecht') 
* 
ERROR at line 1: 
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated 

在這裏:

SQL> delete cities 
    2/

1 row deleted. 

SQL> alter table cities 
    2 drop constraint city_name_alphanumeric 
    3/

Table altered. 

SQL> alter table cities 
    2 add constraint city_name_alphanumeric 
    3 check (regexp_like(name,'^[[:alpha:]]+$')) 
    4/

Table altered. 

SQL> insert into cities values ('Utrecht') 
    2/

1 row created. 

SQL> insert into cities values ('Utr3cht') 
    2/
insert into cities values ('Utr3cht') 
* 
ERROR at line 1: 
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated 


SQL> insert into cities values ('UtrΘcht') 
    2/
insert into cities values ('UtrΘcht') 
* 
ERROR at line 1: 
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated 


SQL> insert into cities values ('|Utrecht') 
    2/
insert into cities values ('|Utrecht') 
* 
ERROR at line 1: 
ORA-02290: check constraint (RWIJK.CITY_NAME_ALPHANUMERIC) violated 

Regards,
Rob。

+0

謝謝你的幫助,我的要求是配置文件/分析現有數據,我可以使用選擇讀取數據,我無法創建約束。 – Walker 2011-02-25 11:41:25

+0

我的不好。儘管你可以在where子句的謂詞中使用檢查條件。 – 2011-02-25 11:44:20

相關問題