1

SQL の 1 つのレコードで特定の正規表現がすべて出現するリストを取得する必要があります。

たとえば、次のような記録があります。

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

この文字列をテーブルに保存し、「{something}」をすべて選択したい

この例では:

=>     {0}
       {1}

私は何をすべきか ???

4

2 に答える 2

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
于 2013-05-23T12:59:27.323 に答える