SQL正则表达式

时间:2011-02-06 05:55:16

标签: sql sql-server regex

我创建了以下用于匹配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

我哪里错了?

4 个答案:

答案 0 :(得分:6)

SQL Server中的LIKE运算符不是正则表达式运算符。你可以做一些复杂的模式匹配,但它不是正常的正则表达式语法。

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

答案 1 :(得分:6)

您可以使用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]'

答案 2 :(得分:4)

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

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

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

意味着范围[ - ]以及其他所有字面意义都非常奇怪。

答案 3 :(得分:1)

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

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