我有一张银行账户的sql表

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

如何设置一个约束,将BSB限制为只有6位数(包括000000)的整数,一直限制为999999?我需要约束还是使用其他数据类型?
我知道我可以做这个检查限制,将int的大小限制为6位CONSTRAINT Bank_BSB_CHK CHECK (BSB < 999999),但是BSB可以从0开始,但长度必须是6位。

最佳答案

整数没有固定格式,因此0000011是相同的值。因此,如果您真的想要一个整数,那么正确的约束是CHECK (BSB >= 0 AND BSB <= 999999)(注意,您的问题中有一个fence post错误,使用<而不是<=)。
如果您的数据实际上是一个6位数的序列,没有数学意义,比如电话号码,那么最好使用字符串数据类型,并按模式对其进行约束。这样,在显示数据时就不必担心重新格式化它了。
一个合理的可移植约束是使用SIMILAR TO运算符(我不知道它的实现有多广泛,但它显然是在SQL标准中实现的),它使用正则表达式:

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

10-07 18:27