2010-01-20 64 views
2

我有這樣的在SQL Server中使用正則表達式,我沒能解決以下問題

開放系統SUB GR字符串(GM/BTIB(1111)/ BTITDBL(2222)/ BTVY(4444)/ ACSVTYSAG)

我需要從中提取2222。

我在做什麼,這是對組字符串:

SUBSTRING(GROUPS, CHARINDEX('(',GROUPS, CHARINDEX('(',GROUPS, CHARINDEX('(',GROUPS,0)+1)+1)+1, 4) AS GroupNo 

但是我看到它是不是很有效,我一直在告訴使用正則表達式來做到這一點。我無法解決它。我希望有人能幫助我。 謝謝。

+0

你能給什麼樣的字符串可能持有一些其他的例子嗎?如果它總是和你在那裏一樣,那麼你可以簡單地做一個SUBSTRING與數字開始和結束的確切索引,但我猜測事實並非如此。 – 2010-01-20 16:04:02

+0

字符串structere外觀完全相同。相同的數量,相同數量的數字。但有時團體名稱可能會更長,這就是爲什麼我不能做一個恆定的子串。這裏是另一個例子:CRM SUB GR(GRM/BTB(2232)/ BITDL(4443)/ BVY(1123)/ ACSV) – stckvrflw 2010-01-21 07:02:08

回答

0

SQL Server本身不支持正則表達式。

但是,您可以使用CLR集成來添加可使用正則表達式的.NET存儲過程。請參閱this article一個很好的解釋。

1

好吧我現在明白你需要什麼從第3個括號開始,然後是4位數字?

看看

Declare @Data varchar(8000) 

select @Data='OPEN SYSTEMS SUB GR (GM/BTIB(1111)/BTITDBL(2222)/BTVY(4444)/ACSVTYSAG)' 

select left(parsename(left(replace(@data,'(','.'), 
    len(@data) - PATINDEX('%(%',reverse(@data))),1),4) 
+0

你好,這似乎不是一個正則表達式,但它的工作原理,但它比子串慢2/3。 – stckvrflw 2010-01-21 07:10:54