从HTML内容创建预告片

时间:2017-02-01 23:10:26

标签: sql sql-server tsql

我想使用现有数据(导入)创建HTML内容(文章)的预告片(预览版)。

当前表架构:

Id | Text                                                             | Teaser
-----------------------------------------------------------------------------
1 | <p>Ready</p><p>when</p><p>you are!</p><p>We will start from...</p> | NULL

我想采取前3段并接收下一个输出:

Id | Teaser
------------------------------------------
1 | <p>Ready</p><p>when</p><p>you are!</p> 

我很确定我可以使用C#(外部应用程序或sql注入函数)来做到这一点但是有没有简单的方法来实现使用ANSI sql / t-sql?

如果PATINDEX可以包含startFrom索引,但它没有,或者我可以使用STUFF右侧n元素插入特殊分隔符,那可能会很棒。

可能有一个使用正则表达式的split函数(例如<p>%</p>)并跳过获取结果元素?

1 个答案:

答案 0 :(得分:2)

Declare @YourTable table (Id int,Text nvarchar(max), Teaser nvarchar(500))
Insert Into @YourTable values
(1,'<p>Ready</p><p>when</p><p>you are!</p><p>We will start from...</p>',NULL),
(2,N'<p>будь здоров</p><p>Ready</p><p>when</p><p>you are!</p><p>We will start from...</p>',NULL)

Update @YourTable Set Teaser = left(Text,B.RetPos+3)
 From  @YourTable A
 Cross Apply (
                Select RetPos 
                 From  (
                        Select RetSeq = Row_Number() over (Order by N)
                              ,RetPos = N
                        From  (Select N=Row_Number() over (Order by (Select null)) From master..spt_values ) N
                        Where  N <= Len(A.Text) and substring(A.Text,N,len('</p>')) = '</p>'
                       ) S
                 Where RetSeq=3
             ) B



Select ID,Teaser from @YourTable

返回

ID  Teaser
1   <p>Ready</p><p>when</p><p>you are!</p>
2   <p>будь здоров</p><p>Ready</p><p>when</p>