【问题标题】:MS SQL column with fixed number of symbols具有固定数量符号的 MS SQL 列
【发布时间】:2022-01-24 09:46:39
【问题描述】:

我正在使用 MS SQL 并创建一个表。 其中一列应包含一个带有 4 个符号的字符串:L001L002 不能有更少或更多的符号,例如L01L0001 是错误。

我需要使用哪种类型的数据? CHAR(4)NCHAR(4) 允许我创建 L01,这对我来说是错误的。

【问题讨论】:

  • 如果值可以有非ASCII字符,则NCHAR(4)否则CHAR(4)。对于格式,您需要 CHECK CONSTRAINT
  • 格式是否总是 1 个字母,后跟 3 个数字?
  • 不,没有指定,所以字母也可以是字符串的中间,比如0L10
  • 预期的“符号”是否总是0-9A-Z

标签: sql-server sqldatatypes


【解决方案1】:

你应该使用CHECK CONSTRAINT: 可以创建带约束的表

CREATE TABLE Test (
    ID int NOT NULL,
    Code varchar(4),
    CHECK (LEN(Code) = 4)
);

或更新现有表:

CREATE TABLE Test (
    ID INT NOT NULL,
    Code CHAR(4)
);

ALTER TABLE Test 
   ADD CONSTRAINT CHK_Code_LEN   
   CHECK (LEN(Code) = 4);

测试:

INSERT INTO Test VALUES (1, 'L001'); -- data inserted

INSERT INTO Test VALUES (2, 'L0011'); -- error raised

INSERT INTO Test VALUES (2, 'L11'); -- error raised

结果:

SELECT * FROM Test;

+====+======+
| ID | Code |
+====+======+
| 1  | L001 |
+----+------+

MS SQL fiddle CHECK

【讨论】:

  • '{3spaces}1' 是允许的
  • CHECK 的解决方案对我来说效果很好,我不知道这样的解决方案,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 2021-11-13
  • 1970-01-01
  • 1970-01-01
  • 2022-07-31
  • 2015-01-17
  • 1970-01-01
相关资源
最近更新 更多