正则表达式CHECK约束与SQL Server
问题描述:
进出口工作努力没有拒绝其格式为“03 XXXX XXXX”,所以我创建了一个表像正则表达式CHECK约束与SQL Server
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)
至于我知道你不能在SQL Server中实现Regex而不使用CLR程序集。它没有像Oracle这样的原生Regex支持......除非我的记忆让我失望。 – scarpacci 2012-08-13 05:04:47
我正在关注我在这里看到的一些事情。 http://www.dbforums.com/microsoft-sql-server/714703-check-constraint-regular-expressions.html – TrewTzu 2012-08-13 05:05:46
到目前为止,我只找到一个支持posix regex约束的DBE,它是Oracle(参考: http://stackoverflow.com/questions/35157662/is-there-a-database-engine-that-allows-for-queriable-field-constraint-specified)。 MS SQL和DB2看起来像他们有自己的通配符变体,这是不幸的,因为你松散层之间的约束一致性:( – 2016-02-02 16:52:06