我有一个带有nif列的表,在我尝试这样做之后,它必须是9位数字:
CREATE TABLE fornecedor(
nif numeric(9) PRIMARY KEY,
nome varchar(64) NOT NULL,
CONSTRAINT nif_tamanho CHECK (length(to_char(nif, 'FM999MI')) = 9));
INSERT INTO fornecedor(nif, nome) VALUES (123456789, 'Pmsmm');
它返回错误说:
错误:关系的新行" fornecedor"违反了检查约束" nif_tamanho"
如何确保插入的数字完全符合9位?
提前致谢
答案 0 :(得分:0)
正如您在评论中提到的,如果您不想丢失前导零,则需要字符串数据类型。
但我认为正确的解决方案取决于您希望如何使用该列。根据列的语义选择数据类型总是好的。
如果您需要对数据进行算术或数字比较,请一定选择integer
(您可以在nif < 100000000
上添加检查约束)。当您将值转换为输出字符串时,您始终可以使用前导零格式化值。
如果你需要对值进行字符串操作(例如子字符串),最好将数据存储为sting类型。