2010-10-21 41 views
2

我是regexs的新手,目前我試圖想出一個簡單的正則表達式,它以下列格式搜索序列號:0217103200XX,其中「XX」可以每個都是一個數字。我正在使用SQL Server Management Studio將正則表達式作爲參數傳遞給存儲過程。我不確定該語法是否與其他編程語言有所不同。我有以下正則表達式作爲參考: (?:2328 \ d \ d(?:0 [1-9] | [1-4] \ d | 5 [0-3])\ d {4})用於T-SQL中序列號的正則表達式

任何建議表示讚賞。

更新: 我實際上在SQL查詢中使用它,而不是在.Net應用程序中。格式如下:

USE [MyDB] 

EXEC MyStoredProcedure @regex = '(?:2328\d\d(?:0[1-9]|[1-4]\d|5[0-3])\d{4})' 
+0

SQL Server不有本地regex支持 - 您需要創建一個SQLCLR程序集以通過.NET公開功能。 – 2010-10-21 17:37:24

+0

@OMG:還有xp_pcre(請參閱本文的[舊答案](http://stackoverflow.com/questions/267921/))。現在可能有些過時了,但在我們的一臺服務器上運行得非常好。 – Tomalak 2010-10-21 17:48:15

+0

@Tomalak:酷,但它不是本地 – 2010-10-21 17:57:36

回答

0

由於OMG小馬說 - SQL服務器本身並不支持正則表達式(需要使用SQLCLR爲2005+,或xp_cre)。

如果我明白你的問題,你可以使用一個PATINDEX找到序列號

Select * 
From dbo.MyTable 
Where PATINDEX('0217103200[0-9][0-9]', SerialNumberColumn) > 0 
+0

爲什麼不是一個簡單的LIKE?我很少使用PATINDEX。總是想知道...... – gbn 2010-10-21 17:49:49

+1

@gbn - 沒有理由,所以我只是喜歡用PATINDEX。必須是括號或東西;-) – codingbadger 2010-10-21 17:52:44

+0

謝謝你的啓發。我對SQL Server不太瞭解,不知道RegEx是否受支持。在查看存儲過程之後,它看起來像正則表達式參數只是插入到數據庫中以供參考。 – kingrichard2005 2010-10-21 17:57:11

1

使用像:有在SQL Server中沒有原生的正則表達式

LIKE '0217103200[0-9][0-9]'