1

我需要在一条 SQL 记录中获取所有出现的特定正则表达式的列表

例如我有这样的记录:

=> '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 回答
0
  1. 您不会“获取特定正则表达式的所有出现的列表”,而是使用正则表达式在另一个字符串中查找特定字符串的出现:)。
  2. {0} 和 {1} 与 {something} 不同。如果你只想要 {} 之间的数字,你会使用\{(\d+)\},但如果可能有字母、数字和下划线,那就是\{(\w+)\}
  3. 您确实应该指定您使用的数据库系统。你确定它甚至支持正则表达式吗?
于 2013-05-21T13:23:31.210 回答