Regex 正则表达式检查约束不适用于SQL server
我试图拒绝所有不是“03 xxxx xxxx”格式的输入,所以我创建了一个如下表Regex 正则表达式检查约束不适用于SQL server,regex,sql-server-2008,tsql,check-constraints,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}') ) 哪一个应该(我想?)接受例如“0312341234”。但是,如果我尝试通过sql manager添加此项,我会收到一条错误消息: INSERT语句与检查约束“num\u C
create table records
(
....
num varchar(255) NOT NULL,
...
CONSTRAINT num_check CHECK (num like '03 [0-9]{4} [0-9]{4}')
)
哪一个应该(我想?)接受例如“0312341234”。但是,如果我尝试通过sql manager添加此项,我会收到一条错误消息:
INSERT语句与检查约束“num\u CHECK”冲突
起初我以为我的正则表达式是关闭的,但我在其他几个地方尝试过,它接受了上面的例子。
有什么想法吗?不适用于正则表达式,它有自己的、简单得多的通配符模式,只支持%
、.
、[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]'
其中条款:
like '03 ' + replicate(@digitChar,4) + ' ' + replicate(@digitChar,4)
示例:据我所知,如果不使用CLR程序集,就无法在SQL Server中实现正则表达式。它不像Oracle那样有本地正则表达式支持…除非我的记忆不好。我在这里看到了一些东西。到目前为止,我只找到了一个支持posix正则表达式约束的DBE,它是Oracle(参考:)。MS SQL和DB2看起来都有自己的通配符变体,这很不幸,因为层之间的约束不一致:(DBA网站上的相关QA…这将教会我如何使我的正则表达式更简洁。谢谢Kobi@TrewTzu-这正是问题所在-
like
不处理正则表达式-只是[]
这是相似的。无论如何,我已经包括了另一个版本-我在检查guid时做了非常相似的事情,不希望[0-9a-fA-F]
重复32次。。。