我一直试图找到如何仅查询SQL Server字段(HTML代码)中的段落的第一句话,但我无法找到。我使用SUBSTRING_INDEX
找到了MySQL的解决方案,我也找到了返回一定数量的单词/字符但没有使用特定分隔符的解决方案。
我的字段存储为HTML,示例如下:
<html><body>Enter the following page information.<br><br>
<b>Display #:</b> 1 [Automatically Populated]<br>
<b>Start Page: </b> 1 [Automatically Populated]<br>
<b>DCI Name:</b> DEMOG<br>
<b>Clinical Planned Event:</b> BASELINE1<br>
<font color="#0070C0">TAKE A SCREENSHOT</font>.<br>
</body></html>
在这个例子中,我希望只返回/查询“输入以下页面信息”而不是段落的其余部分。我假设HTML中断可能是最好的分隔符,因为一些句子可能以冒号结束。
提前谢谢!我希望我能很好地解释这个场景。
答案 0 :(得分:0)
我意识到这是罪恶,但假设第一个<br>
是行的结尾,这应该在SQL Server后端工作:
DECLARE @x nvarchar(200)
SET @x = '<html><body>Enter the following page information.<br><br><b>Display #:</b>'
SELECT substring(@x,
(charindex('<br>', lower(@x)) - 1) -
(charindex('>', REVERSE(LEFT(@x, charindex('<br>', lower(@x)) - 1))))+2,
charindex('>', REVERSE(LEFT(@x, charindex('<br>', lower(@x)) - 1))) - 1
)
基本上,我们在第一个>
之前的字符串中找到<br>
的 last 实例,然后在最后找到<br>
,然后选择长度之间的差异。
这绝对可以在函数中写得更清晰,但我选择使用纯T-SQL来避免使用函数。
最后一点:您可能不需要lower
个功能;我的测试数据库区分大小写,因此需要使外壳保持一致。