3

我试图拒绝所有不是格式“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 manager 添加它,我会收到一条错误消息:“INSERT 语句与 CHECK 约束“num_check”冲突”

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

4

1 回答 1

7

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

于 2012-08-13T05:23:55.887 回答