簡體   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