gpt4 book ai didi

SQL Server - 类似/模式匹配

转载 作者:行者123 更新时间:2023-12-04 21:05:14 26 4
gpt4 key购买 nike

我正在尝试在关键字段上实现检查约束。关键字段由 3 个字符的前缀组成,然后附加数字字符(可以手动提供,但默认是从序列中获取整数值,然后将其转换为 nvarchar)。关键字段定义为 nvarhcar(9)。

我正在对多个表执行此操作,但下面是一个具体示例来演示:表名:公司关键字段:IDCompany关键字段前缀:CMP

有效 key 的示例 -

CMP1
CMP01
CMP10000
CMP999999

无效 key 的示例 -

CMPdog1
steve
1CMP1
1
999999999

我想出的检查约束是:

IDCompany LIKE 'CMP%[0-9]'

然而,这被CMPdog1等打败了

我应该使用什么作为检查约束来强制执行未知数量的数字字符?

我可以做以下事情:

IDCompany LIKE 'CMP[0-9]' OR IDCompany LIKE 'CMP[0-9][0-9]' OR .... through to 6 characters

但是,这似乎是一种笨拙的做法,还有更聪明的方法吗?

编辑 2:这实际上不起作用,它不排除负数:

EDIT 1:
This solution ended up working for me:

IDCompany nvarchar(9) NOT NULL CONSTRAINT DEF_Company_IDCompany DEFAULT 'CMP' + CAST((NEXT VALUE FOR dbo.sq_Company) AS nvarchar) CONSTRAINT CHK_Company_IDCompany CHECK (IDCompany LIKE 'CMP%[0-9]' AND ISNUMERIC(SUBSTRING(IDCompany,4,LEN(IDCompany)-3))=1)

编辑 3:解决方案 -正如下面 Szymon 的帖子中所建议的。

谢谢大家!

最佳答案

你可以这样做:

where LEFT(IDCompany, 3) = 'CMP'
and isnumeric(RIGHT(IDCompany, len(IDCompany) - 3)) = 1
and IDCompany not like '%[.,-]%'

第一部分检查它是否以 CMP 开头

下一部分是确保其余部分是数字,但不包括负数和小数。

关于SQL Server - 类似/模式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22928583/

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