正则表达式 CHECK 约束不适用于 SQL Server

标签 regex sql-server-2008 tsql check-constraints

我试图拒绝所有不采用“03 xxxx xxxx”格式的输入,因此我创建了一个类似的表格

create table records
(
....
num varchar(255) NOT NULL,
...
CONSTRAINT num_check CHECK (num like '03 [0-9]{4} [0-9]{4}')
)

哪个应该(我认为?)接受例如“03 1234 1234”。但如果我尝试通过 sql 管理器添加它,我会收到一条错误消息: “INSERT 语句与 CHECK 约束“num_check”冲突”

起初我以为我的正则表达式已关闭,但我在其他几个地方尝试过它并且它接受上面的示例。 有什么想法吗?

最佳答案

like不适用于正则表达式,它有自己的、更简单的通配符模式,仅支持 %_[a-z][^a-z]。就是这样。 {4} 不起作用,就像大多数正则表达式功能一样。
您应该能够使用:

like '03 [0-9][0-9][0-9][0-9] [0-9][0-9][0-9][0-9]'

另一个选项,重复性稍低一些:

declare @digitChar nvarchar(12)
set @digitChar = '[0-9]' 

Where 子句:

like '03 ' + replicate(@digitChar,4) + ' ' + replicate(@digitChar,4)

示例:http://sqlfiddle.com/#!3/d41d8/3251

关于正则表达式 CHECK 约束不适用于 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11928419/

相关文章:

javascript - 正则表达式 : only capturing a stuff within parenthesis

php - 正则表达式包含一个字段

php - 如何从一段文本中提取YouTube嵌入代码?

sql-server - SQL Server 2005 中 LOCK_ESCALATION = TABLE 的等效项是什么?

具有大量 JOIN 条件的 SQL 查询非常慢

sql-server - BEGIN TRY DROP TABLE 有什么危险?

sql - 在数据库中搜索并替换部分字符串

java - 按空格、连字符和 "ab cd"分割字符串

SQL Server 查询按列中的最大值分组

sql-server - 查询SQL Server上存储过程的内容