繁体   English   中英

SQL正则表达式

[英]SQL Regular Expressions

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

CREATE RULE ISBN_Rule AS @value LIKE '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中的LIKE运算符不是正则表达式运算符。 你可以做一些复杂的模式匹配,但它不是正常的正则表达式语法。

http://msdn.microsoft.com/en-us/library/ms179859.aspx

你可以使用LIKE来做到这一点。

你需要一些OR来处理不同的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]'

SQL Server 2005不支持开箱即用的REGEX表达式,您需要OLE自动化或CLR来通过UDF提供该功能。

唯一支持的通配符是%(any)和_(一),字符范围(或否定)匹配使用[]可选[^]。 所以你的表达

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

意味着一些非常奇怪的范围[ - ]和其他一切都是字面的。

如果它分裂| 和doesen't带空格,它可能缺少ISBN前的空间和/或后(\\ d | X) 这里 $ ..而且,我怀疑这是问题,但[ - ]可能是[ - ]

编辑:好的,当你得到一个正则表达式lib /控件时,请记住这一点。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM