You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为ID属性实现指定开头或首尾字符的CHECK约束?

实现ID属性的CHECK约束方案

1. 需求1:ID以AB开头,后跟恰好8位整数

你的原始代码存在两个问题:一是LIKE匹配的字符串缺少开头的单引号,二是_通配符仅能匹配任意单个字符,无法限制后8位必须为整数。以下是不同数据库环境下的严格实现方案:

通用兼容版(适配MySQL/PostgreSQL)

通过长度校验、前缀匹配+正则校验数字的组合实现:

CREATE TABLE YourTable( -- 避免使用SQL关键字`Table`作为表名
    ID TEXT NOT NULL 
        PRIMARY KEY 
        CHECK (
            LENGTH(ID) = 10
            AND LEFT(ID, 2) = 'AB'
            AND SUBSTR(ID, 3) REGEXP '^[0-9]{8}$'
        )
);

SQL Server 适配版

用PATINDEX替代正则校验数字:

CREATE TABLE YourTable(
    ID VARCHAR(10) NOT NULL 
        PRIMARY KEY 
        CHECK (
            LEN(ID) = 10
            AND LEFT(ID, 2) = 'AB'
            AND PATINDEX('%[^0-9]%', SUBSTRING(ID, 3, 8)) = 0
        )
);

Oracle 适配版

使用REGEXP_LIKE完成正则校验:

CREATE TABLE YourTable(
    ID VARCHAR2(10) NOT NULL 
        PRIMARY KEY 
        CHECK (
            LENGTH(ID) = 10
            AND SUBSTR(ID, 1, 2) = 'AB'
            AND REGEXP_LIKE(SUBSTR(ID, 3), '^[0-9]{8}$')
        )
);

2. 需求2:ID以指定字母开头且以指定字母结尾

分两种场景给出实现方式:

场景1:仅限制开头和结尾,中间无额外要求

直接用LIKE通配符%匹配中间任意内容:

CREATE TABLE YourTable(
    ID TEXT NOT NULL 
        PRIMARY KEY 
        CHECK (ID LIKE '指定开头字符%指定结尾字符')
);

比如要求以X开头、Z结尾:CHECK (ID LIKE 'X%Z')

场景2:限制开头、结尾,同时中间有格式/长度要求

比如要求以X开头、Z结尾,中间恰好5位数字:

CREATE TABLE YourTable(
    ID TEXT NOT NULL 
        PRIMARY KEY 
        CHECK (
            LENGTH(ID) = 7
            AND LEFT(ID, 1) = 'X'
            AND RIGHT(ID, 1) = 'Z'
            AND SUBSTR(ID, 2, 5) REGEXP '^[0-9]{5}$'
        )
);

你的原始代码修正

如果仅需保证ID以AB开头、后跟8个任意字符(不限制是否为整数),只需补全单引号并修改表名:

CREATE TABLE YourTable(
    ID TEXT NOT NULL 
        PRIMARY KEY 
        CHECK (ID LIKE 'AB________') -- 补全开头单引号,8个_对应8位字符
);

内容的提问来源于stack exchange,提问作者helloworld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 09:32:56