Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式检查约束不适用于SQL server_Regex_Sql Server 2008_Tsql_Check Constraints - Fatal编程技术网

Regex 正则表达式检查约束不适用于SQL server

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

我试图拒绝所有不是“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 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次。。。