如何在 SQL 中将数据类型限制为 6 位数字?

How to limit data type to 6 digit numbers in SQL?

我在 sql 有一个 table 的银行账户

CREATE TABLE (
    name VARCHAR(100),
    bsb INTEGER,
    account_num INTEGER,
    PRIMARY KEY (bsb, account_num)
);

如何设置一个约束,将 BSB 限制为只有 6 位整数,包括 000,000 到 999,999?我是否需要约束或使用不同的数据类型?

我知道我可以执行此检查限制以将 int 的大小限制为 6 位数字CONSTRAINT Bank_BSB_CHK CHECK (BSB < 999999)但是 BSB 可以以 0 开头,但长度必须为 6 位数字。

整数没有固定格式,所以0000011是相同的值。所以如果你真的想要一个整数,那么正确的约束是 CHECK (BSB >= 0 AND BSB <= 999999)(注意你的问题中有一个 fence-post 错误,使用 < 而不是 <=)。

如果您的数据实际上是 6 位数字的序列,没有数学意义,例如 phone 数字,您最好使用字符串数据类型,并按模式对其进行约束。这样,您就不必担心在显示数据时重新格式化它。

一个合理的可移植约束是使用 SIMILAR TO 运算符(我不知道它的实现有多广泛,但它显然在 SQL 标准中),它使用常规表达式:

CHECK ( BSB SIMILAR TO '[0-9]{6}' )

由于数据是 6 位数字的序列,没有数学意义,因此最好使用 CHAR(6) 数据类型并对 bsb 可以采用的模式施加约束。这将是将模式限制为 6 位数字的正确约束。

CONSTRAINT Bank_Account_BSB_CHK CHECK (bsb SIMILAR TO '[[:digit:]]{6}')