Regex CHECK约束不适用于SQL Server

时间:2012-08-13 05:01:39

标签: 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“”

冲突

起初我认为我的正则表达式已经关闭,但我已经在其他几个地方尝试了它并接受上面的例子。 任何想法?

1 个答案:

答案 0 :(得分:7)

like不适用于正则表达式,它有自己的,更简单的通配符模式,仅支持%_[a-z]和{{1 }}。而已。与大多数正则表达式功能一样,[^a-z]不起作用 你应该可以使用:

{4}

另一种选择,重复性稍差:

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

Where子句:

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

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