SQL正则表达式

SQL正则表达式,sql,sql-server,regex,Sql,Sql Server,Regex,我为匹配ISBN创建了以下SQL正则表达式模式: 将规则ISBN\u RULE创建为@value,如'ISBN\x20(?=.{13}$)\d{1,5}([-])\d{1,7}\1\d{1,6}\1(\d|X)$' 我使用以下值作为测试数据;但是,未提交数据: ISBN 0 93028 923 4 | ISBN 1-56389-668-0 | ISBN 1-56389-016-X 我错在哪里?SQL Server 2005不支持现成的正则表达式,您需要OLE自动化或CLR通过UDF提供该功

我为匹配ISBN创建了以下SQL正则表达式模式:

将规则ISBN\u RULE创建为@value,如'ISBN\x20(?=.{13}$)\d{1,5}([-])\d{1,7}\1\d{1,6}\1(\d|X)$'
我使用以下值作为测试数据;但是,未提交数据:

ISBN 0 93028 923 4 | ISBN 1-56389-668-0 | ISBN 1-56389-016-X

我错在哪里?

SQL Server 2005不支持现成的正则表达式,您需要OLE自动化或CLR通过UDF提供该功能

唯一支持的通配符是%(any)和(one),字符范围(或求反)匹配使用[]可选[^]。那么你的表情呢

'ISBN\x20(?=.{13}$)\d{1,5}([- ])\d{1,7}\1\d{1,6}\1(\d|X)$'

表示范围为[-]的非常奇怪的东西,其他的都是文字。

如果它在|上拆分,并且没有去除空白,那么它可能在ISBN之前和/或(\d | X)之后缺少一个空格。。此外,我怀疑这是问题所在,但[-]可能是[-]


编辑:好的,当您获得正则表达式库/控件时,请记住这一点。

SQL Server中的
LIKE
操作符不是正则表达式操作符。您可以进行一些复杂的模式匹配,但它不是普通的正则表达式语法


您可以使用LIKE来完成此操作

您需要一些ORs来处理不同的ISBN 10和13格式

对于上述字符串:

LIKE 'ISBN [0-9][ -][0-9][0-9][0-9][0-9][0-9][ -][0-9][0-9][0-9][ -][0-9X]'

我以前使用过现成的正则表达式:-s@Sudantha:不是完整的正则表达式,只有有限的支持,如和PATINDEX支持。我没有投反对票——实际上这是我的赞成票。ISBN格式比你们这里的格式更加通用。见维基百科。这与正则表达式模式相去甚远。@sudantha:我的解决方案只解决了一个很小的问题。谢谢你。@gbn我想现在我在SQL中得到了正则表达式的概念;)块长度是可变的。在我使用ISBN的情况下,我发现省略组分隔符(
-
)并只存储13位数字是可以接受的(如果
X
可以被视为数字;),因此只有一个
检查
表达式。校验和不适用于数据库,因为存在发布者错误使用的不兼容值。@onedaywhen:我也会这样做。