SQL 设计一个 table 的查询,其中有一列只接受 1 个字母和 2 个数字,共 3 个字符
SQL Query for designing a table which has a column that accepts only 1 alphabet and 2 digits total 3 characters
如果我们创建一个 table x 并且它有一个 y 列,那么 y 列应该只接受包含字母数字值的值,例如 "A39".
CREATE TABLE X
(
Y Text not null check (length(Y)('[A-Z]','[0-9]','[0-9]' ,3))
);
我无法运行这段代码,我不确定是否是这样,我应该在这里使用哪个约束?
您需要使用 GLOB
进行此检查:
sqlite> CREATE TABLE x (y TEXT NOT NULL CHECK (y GLOB '[A-Z][0-9][0-9]'));
sqlite> INSERT INTO x VALUES ('A01');
sqlite> INSERT INTO x VALUES ('A01Z');
Error: CHECK constraint failed: x
The GLOB
operator is similar to LIKE
but uses the Unix file globbing syntax for its wildcards. Also, GLOB
is case sensitive, unlike LIKE
.
因此,如果您也想要小写字母,请使用 [A-Za-z]
而不是 [A-Z]
。
如果我们创建一个 table x 并且它有一个 y 列,那么 y 列应该只接受包含字母数字值的值,例如 "A39".
CREATE TABLE X
(
Y Text not null check (length(Y)('[A-Z]','[0-9]','[0-9]' ,3))
);
我无法运行这段代码,我不确定是否是这样,我应该在这里使用哪个约束?
您需要使用 GLOB
进行此检查:
sqlite> CREATE TABLE x (y TEXT NOT NULL CHECK (y GLOB '[A-Z][0-9][0-9]'));
sqlite> INSERT INTO x VALUES ('A01');
sqlite> INSERT INTO x VALUES ('A01Z');
Error: CHECK constraint failed: x
The
GLOB
operator is similar toLIKE
but uses the Unix file globbing syntax for its wildcards. Also,GLOB
is case sensitive, unlikeLIKE
.
因此,如果您也想要小写字母,请使用 [A-Za-z]
而不是 [A-Z]
。