2011-09-04 30 views
2

我将GUID存储在oracle 10g表中的列中。该列的数据类型是Varchar(2)。 现在我想检查此列中的值是否为有效的GUID。验证Oracle列中的GUID值

如何在Oracle中查询以检查值是否为有效的GUID?

+0

考虑GUID是超过2个字符时,我会救你的麻烦,告诉你,没有,他们是不是有效。 –

+0

我的不好,列的长度是200 – acadia

回答

2

我从here采取的测试样品,并从here正则表达式:

create table guids (guid varchar(36)); 
insert into guids values ('BC1EAAAF-1B5A-4695-9797-3ED6C99B7FC5'); 
insert into guids values ('BCXXAAAF-1B5A-4695-9797-3EDXXXXXXFC5'); 
insert into guids values ('-jk1029347 lka llur 193241 lk;qed'); 

select guid, 
    case when regexp_like(guid, 
'^({|\()?[A-Fa-f0-9]{8}-([A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}(}|\))?$' 
    ) 
    then 'Y' 
    else 'N' 
    end AS is_valid 
from guids; 

GUID         IS_VALID 
------------------------------------ -------- 
BC1EAAAF-1B5A-4695-9797-3ED6C99B7FC5 Y   
BCXXAAAF-1B5A-4695-9797-3EDXXXXXXFC5 N   
-jk1029347 lka llur 193241 lk;qed N   
0

我假设你的意思是VARCHAR2。 VARCHAR(2)将是一个非常短的GUID。

我不会将这些值存储在数据库中,然后验证它们是否正确。验证它们是否正确,然后存储它们。使用检查约束或触发器。这样,你知道你的数据库里有什么好数据。