查询SQL Server / Access前端中HTML段落字段的第一句

时间:2012-10-01 18:32:40

标签: html sql sql-server

我一直试图找到如何仅查询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中断可能是最好的分隔符,因为一些句子可能以冒号结束。

提前谢谢!我希望我能很好地解释这个场景。

1 个答案:

答案 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个功能;我的测试数据库区分大小写,因此需要使外壳保持一致。