如何定义列的约束以在oracle中包含字母数字值?

问题描述 投票:1回答:2

我需要创建一个包含列的表。条目应该是字母数字。如何为我尝试使用的这种情况定义一个约束,

create table bankAccount  
(  
accNo varchar2(15) check (accNo like '%[A-Za-Z0-9]%')  
);  

但在输入期间,不会存储任何数据,也不会创建任何条目。

sql regex oracle constraints alphanumeric
2个回答
2
投票

您可以使用REGEXP_LIKE(),但如果所有字符都必须是字母数字,那么您需要开始和结束锚点:

CREATE TABLE bankaccount
( accno VARCHAR2(15) CHECK ( REGEXP_LIKE(accno, '^[A-Za-z0-9]+$') ) );

(请注意,您也可以使用[[:alnum:]] POSIX字符类而不是[A-Za-z0-9]。)

如果您希望帐号正好是15个字符,那么您可能需要这样的内容:

CREATE TABLE bankaccount
( accno VARCHAR2(15) CHECK ( REGEXP_LIKE(accno, '^[A-Za-z0-9]{15}$') ) );

如果你只想要大写字母:

CREATE TABLE bankaccount
( accno VARCHAR2(15) CHECK ( REGEXP_LIKE(accno, '^[A-Z0-9]+$') ) );

希望这可以帮助。


1
投票

你会使用regexp_like()

accNo varchar2(15) check (regexp_like(accNo, '^[A-Za-z0-9]+$'))
© www.soinside.com 2019 - 2024. All rights reserved.