我在用於存儲xml數據的表中有一個varchar列。是的,我知道有一個我應該使用的xml數據類型,但我認爲這是在xml數據類型可用之前設置的,所以現在我必須使用varchar。 :)在varchar字段中解析SQL Server xml字符串
存儲的數據看起來類似於以下內容:
<xml filename="100100_456_484351864768.zip"
event_dt="10/5/2009 11:42:52 AM">
<info user="TestUser" />
</xml>
我需要解析的文件名,以獲得兩個下劃線在這種情況下將是「456」的數字。文件名的第一部分「不應該」改變長度,但中間數字會改變。我需要一個解決方案,如果第一部分的長度發生變化(你知道它會改變,因爲「不應該改變」總是意味着它會改變)。
對於我現在所擁有的,我使用XQuery來提取文件名,因爲我認爲這可能比直接字符串操作更好。我將字符串轉換爲xml來執行此操作,但我不是XQuery專家,所以當然我遇到了問題。我找到了一個XQuery函數(substring-before),但無法使其正常工作(我甚至不確定該函數是否適用於SQL Server)。可能有一個XQuery函數很容易做到這一點,但如果有我不知道它。
所以,我從桌上的文件名類似於下面的查詢:
select CAST(parms as xml).query('data(/xml/@filename)') as p
from Table1
從這個我認爲我能夠施放此回字符串,然後做一些instring或charindex函數來計算出下劃線的位置,以便我可以將所有這些內容封裝在子字符串函數中以挑選出我需要的部分。不用太過分,我很確定我最終可以這樣做,但我知道必須有一個更簡單的方法。這種方式會使SQL語句中的一個巨大的不可讀的字段,即使我將它移動到一個函數中,仍然會混淆,試圖找出發生了什麼。
我敢肯定有一個比這更容易,因爲它似乎是簡單的字符串操作。也許有人可以指出我正確的方向。謝謝
什麼版本的SQL Server? – 2009-10-10 01:39:03
對不起,直到現在我纔看到這個評論。我們現在正在使用SQL Server 2008。 – Dusty 2009-10-12 20:53:00