我想使用现有数据(导入)创建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>
)并跳过获取结果元素?
答案 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>