2012-10-01 65 views
0

我一直在試圖找到如何查詢SQL Server的字段(HTML代碼)中的段落的第一句,但我無法找到如何。我找到了使用SUBSTRING_INDEX的MySQL的解決方案,我也找到了解決方案返回一定數量的字/字符,但沒有使用特定的分隔符。在SQL Server/Access前端中查詢HTML段落字段的第一句

我場被存儲爲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中斷可能是最好的分隔符,因爲有些句子可能以冒號結尾。

預先感謝您!我希望我解釋得很好。

+2

Oy,爲什麼HTML輸出就像存儲在數據庫中那樣? – MetalFrog

+0

這是由基於Web的應用程序驅動的,具體爲:HP Quality Center。 – user1712493

+0

嘿,我不嫉妒。 :)看起來你有一個很好的解決方案,但嘗試! – MetalFrog

回答

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>之前的字符串中,然後在末尾找到<br>,並取兩個長度的差值。

這絕對可以在函數中寫得更乾淨,但我選擇使用純T-SQL來避免使用函數。

最後一點:您可能不需要lower函數;我的測試數據庫是區分大小寫的,因此需要使套管保持一致。

+0

謝謝 - 但是,這似乎是靜態的,我提供的一個例子。我有許多行數據具有不同的HTML段落(不同的單詞,一些以冒號結尾,完全停止..等)我主要是尋找一種動態的方式來返回僅用於報告目的段落的第一句。儘管我想進一步複雜化,但我只是意識到,如果我只是將第一句話拉到HTML斷點,它就不會很好地轉換爲我的報表上的富文本,因爲它不會有閉合的HTML語句來保持它的清潔。 YOY! – user1712493

+0

我不認爲它是靜態的;該查詢找到第一個「
」和「
」之前的最後一個標記之間的文本。這應該在第一個例子中刪除前導''。目的是通過在'SELECT'語句中使用這個來替換硬編碼的'@ x'變量。你是否嘗試過使用不同的值來查看結果? – LittleBobbyTables

+0

噢,是的,對不起,我很快就回復了 - 我會嘗試不同的價值觀並回復你!謝謝! – user1712493