SQL の 1 つのレコードで特定の正規表現がすべて出現するリストを取得する必要があります。
たとえば、次のような記録があります。
=> 'Dear {0}, your account will expire in {1} days'
この文字列をテーブルに保存し、「{something}」をすべて選択したい
この例では:
=> {0}
{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