2013-05-21 49 views
1

我需要在SQL如何在SQL單場

例如單個記錄特定的正則表達式所有出現的列表中選擇正則表達式中出現的所有我的記錄是這樣的:

=> 'Dear {0}, your account will expire in {1} days' 

我保存這個字符串在表中,我要選擇所有出現在這個例子中「{}東西」

=>  {0} 
     {1} 

我該怎麼辦?

回答

1

謝謝大家 我剛剛發現我的問題

Declare @InputText nVarChar(100) 
; 

Select @InputText = 'Dear {Token 0}, your account will expire in {Token 1} days' 
; 

with Tokens AS 
(
    SELECT SUBSTRING(@InputText,PATINDEX('%{%',@InputText)+1,PATINDEX('%}%',@InputText)-PATINDEX('%{%',@InputText)-1) As Token 
    , SUBSTRING(@InputText,PATINDEX('%}%',@InputText)+1,LEN(@InputText))      As New 
    , PATINDEX('%{%',SUBSTRING(@InputText,PATINDEX('%}%',@InputText)+1,LEN(@InputText)))    As [NextStart] 
    , PATINDEX('%}%',SUBSTRING(@InputText,PATINDEX('%}%',@InputText)+1,LEN(@InputText)))    As [NextEnd] 

    Union All 

    Select SUBSTRING(Tokens.New,Tokens.[NextStart]+1,Tokens.[NextEnd]-Tokens.[NextStart]-1) 
    , SUBSTRING(Tokens.New,Tokens.[NextEnd]+1,LEN(Tokens.New)) 
    , PATINDEX('%{%',SUBSTRING(Tokens.New,Tokens.[NextEnd]+1,LEN(Tokens.New))) 
    , PATINDEX('%}%',SUBSTRING(Tokens.New,Tokens.[NextEnd]+1,LEN(Tokens.New))) 
    From Tokens 
    Where Tokens.[NextStart] != 0 
) Select Token 
    From Tokens 

以及結果的答案會是這樣的:

=> 
    Token 0 
    Token 1 
0
  1. 你不「得到所有出現的特定正則表達式的列表」,而是使用正則表達式來查找另一個字符串中特定字符串的出現:)。
  2. {0}和{1}與{something}不同。如果你只需要{}之間的數字,你會使用\{(\d+)\},但如果可能有字母,數字和下劃線,它應該是\{(\w+)\}
  3. 你真的應該指定你使用的數據庫系統。你確定它甚至支持正則表達式嗎?
+0

感謝你的答案 但我使用sql服務器,我也不想用另一個表中的一些簡單表達式替換這些正則表達式,我只是想列出它們,而且它們可能在其他輸入文本中更多或更少 – user593630