[英]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
运算符不是正则表达式运算符。 你可以做一些复杂的模式匹配,但它不是正常的正则表达式语法。
你可以使用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.