CHECK中的通配符创建表格作为字符串

时间:2009-02-26 03:42:41

标签: sql string character wildcard

我创建了一个信息表,用于存储员工记录,SQL查询如下...

CREATE TABLE info1 (
   empid VARCHAR(8) PRIMARY KEY CONSTRAINT empchk 
      CHECK (empid IN ('kh\%' ESCAPE '\''),
   initials CHAR(6), fname CHAR(25) NOT NULL, 
   lname CHAR(25), 
   userstatus INTEGER NOT NULL, 
   designation CHAR(10) NOT NULL
);

现在,您可以看到empid中的约束是kh%,其中 - 据我记得 - %表示任意数量的以下字符(仅限8当然)可以是任何东西,对吗?

我正在使用Java DB,奇怪的是它也将%符号作为字符串的一部分,所以如果我输入khce0001,它会说empchk违规,它只需要在kh%

我该怎么办?为什么会这样?

1 个答案:

答案 0 :(得分:1)

此SQL查询中的错误是我使用了IN而不是LIKE(我相信它会进行通配符检查),所以

  • 我放弃了约束......

    ALTER TABLE info DROP CONSTRAINT empchk;
    
  • 并用...更改了表格。

    ALTER TABLE info ADD CONSTRAINT empchk CHECK (empid LIKE ('kh%'));
    
  • 因此正确的SQL查询应该是......

    CREATE TABLE info1 (
        empid VARCHAR(8) PRIMARY KEY CONSTRAINT empchk 
            CHECK (empid LIKE ('kh%')),
        initials CHAR(6), 
        fname CHAR(25) NOT NULL,
        lname CHAR(25), 
        userstatus INTEGER NOT NULL,
        designation CHAR(20) NOT NULL
    );