Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 帮助约束_Sql_Sql Server_Oracle_Database Design_Constraints - Fatal编程技术网

Sql 帮助约束

Sql 帮助约束,sql,sql-server,oracle,database-design,constraints,Sql,Sql Server,Oracle,Database Design,Constraints,我正在创建一个表,其中一个约束条件是第一个字符必须是“G”,然后后跟5个数字: CREATE TABLE PHONE ( PHONEID CHAR (6) NOT NULL, PHONENO NUMERIC NOT NULL, CONSTRAINT PHONE_PHONEID_PK PRIMARY KEY (PHONEID), CONSTRAINT PHONE_PHONENO_UK UNIQUE (PHONENO) ); 如何使用sql实现这一点?我需要在MS SQL中对冒充的

我正在创建一个表,其中一个约束条件是第一个字符必须是“G”,然后后跟5个数字:

CREATE TABLE PHONE (
  PHONEID CHAR (6) NOT NULL,
  PHONENO NUMERIC NOT NULL,
  CONSTRAINT PHONE_PHONEID_PK PRIMARY KEY (PHONEID),
  CONSTRAINT PHONE_PHONENO_UK UNIQUE (PHONENO)
);

如何使用sql实现这一点?我需要在MS SQL中对冒充的

执行此操作,如下所示:

create table Phone
(
    PhoneId char(6) not null
        constraint Phone_PhoneId_PK primary key
        constraint Phone_PhoneId_CK check (PhoneId like 'G[0-9][0-9][0-9][0-9][0-9]'),
    PhoneNumber numeric not null
        constraint Phone_PhoneNumber_UK unique
)

insert Phone
values('G00001', 123) -- pass

insert Phone
values('G0001', 123)  -- fail

insert Phone
values('D0001', 123) -- fail

在甲骨文中,我认为应该是:

CREATE TABLE PHONE (
  PHONEID CHAR (6) NOT NULL,
  PHONENO NUMERIC NOT NULL,
  CONSTRAINT PHONE_PHONEID_PK PRIMARY KEY (PHONEID),
  CONSTRAINT PHONE_PHONENO_UK UNIQUE (PHONENO),
  CONSTRAINT PHONE_PHONEID_CK CHECK(REGEX_LIKE(PHONEID, '^G\d{5}$'))
);

*免责声明:我与Oracle合作已经有一段时间了,我现在无法访问Oracle数据库来验证上述内容,这是基于的文档和类似REGEXP_的函数。可能需要一些调整。

请不要使用所有的大写字母-看起来你在大喊大叫!对不起,我用大写字母写sql,忘了关闭它,我的错。我使用的是oracle sql developer如果第一个字符始终是“G”,则有一个参数表明它是一个单独的列(甚至不存储在DB中,而是由UI派生/剥离)。oracle 10g+-在此之前,oracle不支持regexPre 10g,您可以使用RTRIM(PHONEID,'0123456789')='G'来完成。可能需要检查长度/空间填充。就我个人而言,我从不使用CHAR。