gpt4 book ai didi

sql - Oracle SQL Developer 限制数据类型 char(5) 的字符数

转载 作者:行者123 更新时间:2023-12-04 08:40:11 27 4
gpt4 key购买 nike

我的任务是实现一个带有可变组代码的表。有几个要求。

  • 字符(5)
  • 2 或 4 个大写字母加上 1 位介于 1 和 4 之间的数字(例如,AA1、AABB1)
  • 任何违反第 1 点和第 2 点的输入都应被禁止

  • 我唯一能想到的是 regexp_like 但我的努力是徒劳的,例如
    create table Test(
    groupcode char(5) check(
    regexp_like(groupcode, '^[A-Z]{2}[0-9]$', 'c')
    )
    );

    INSERT INTO Test(groupcode) VALUES ('AA1');
    我插入了这个,但它一直告诉我有一些违规行为,我不明白。
    我指定 ^$因为我不想要类似 'bbAA1' 的东西或 'AA1bb'出现。
    我也对非正则表达式解决方案持开放态度。在今天下午的所有工作之后,我开始怀疑我的方法。
    编辑 --致蒂姆: enter image description here

    最佳答案

    您的正则表达式 ^[A-Z]{2}[0-9]$只允许(正好)三个字符。但是一列定义为 char(5)如果您提供的数量少于三个,则会用空格填充,因此实际上 'AA1'将存储为 'AA1 '这违反了您的正则表达式。
    使用 char(3)反而。
    更好的是,永远不要使用 char完全(您刚刚经历了原因之一),请使用 varchar(5)varchar(3)两者都适用于您的正则表达式。

    2 or 4 uppercase letters plus 1 digit whose value is between 1 and 4


    那不是您的正则表达式所做的。 [A-Z]{2}正好两个大写字母。如果您想允许不同长度的模式,则无法使用 char(5)除非您还在正则表达式中包含空格:
    create table test
    (
    groupcode char(5) check(
    regexp_like(groupcode, '(^[A-Z]{2}[0-9] $)|(^[A-Z]{4}[0-9]$)', 'c'))
    );
    上面的正则表达式允许两个大写字符后跟一个数字和两个空格或四个大写字符后跟一个数字。

    关于sql - Oracle SQL Developer 限制数据类型 char(5) 的字符数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64606303/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com