我正在为跟踪有关我公司的数据库开发项目的信息的应用程序设计数据库。项目管理办公室 (PMO) 根据项目的成本是否计入合并整合,为每个项目分配一个伪编号。举例来说,分配的数字将以INT(对于有助于合并整合的项目)或NINT(对于不有助于合并整合的项目)开头。然后分配一个序列号。例如,INT175将是第 175 个确定有助于合并整合的项目。另一个问题是 PMO 有时希望创建多个具有相同编号的项目,因为它们是“相关的”。因此,例如可能有一个 INT175 a项目、INT175 b项目等。
虽然 PMO 认为这个数字是项目的标识符,但在数据库中,我只会将该列用作备用唯一键,以确保不会创建重复的项目并作为用户的搜索键。我想对该列实施检查约束,以确保只能输入与我上面给出的规则匹配的有效数字。
我的第一个想法是使用正则表达式。在 Oracle 中,我的目标 DBMS,我们有可以使用的 REGEX_LIKE 函数。我研究了关于正则表达式的文档(这里、这里、这里、这里和这里),发现这些选项令人眼花缭乱!无论出于何种原因,我的大脑都在试图获取所有各种模式匹配选项的列表并将其应用到我的特定示例中。我是最擅长使用示例的人之一。不幸的是,我还没有找到很多例子。我发现的东西要么太简单,要么太复杂,我无法理解它们。
到目前为止我尝试过的是这样的:
select c
from (
select 'INT1756b' c from dual union all
select 'INT175a' c from dual union all
select 'INT75a' c from dual union all
select 'INT75' c from dual union all
select 'NINT2283a' c from dual union …Run Code Online (Sandbox Code Playgroud)