2015-10-22 67 views
0

我的表中有一個名爲command的列,其中存儲了關於應由系統發出的電子郵件的信息。MS SQL - 顯示動態長度的值

的數據是這樣的:

<_email><property name="To">[email protected];[email protected];[email protected]</property><property name="From">[email protected]</property> 
<_email><property name="To">[email protected]</property><property name="From">[email protected]</property> 

我想用一個select語句,只顯示那些誰將會收到電子郵件的電子郵件地址。通過這樣做,輸出應該是這樣的:

實例第1行:

[email protected];[email protected];[email protected] 

例第2行:

[email protected] 

我不能使用substring由於電子郵件地址變化在長度。我認爲可以通過使用正則表達式以某種方式實現這一點,但我無法解決它。

你能幫我嗎?

謝謝!

/Krustofski

+1

我想你應該創建一個函數來分割每封電子郵件 –

+0

你能向我們提供您的列中的某些示例XML值,所以我們可以建立出來的東西呢? – Marco

+0

我已更新該問題,以便您可以複製示例字符串。 – user1297532

回答

1

可以使用CHARINDEX函數,以便檢索開始和你的字符串的結尾,並使用一些數學執行字符串:

Select Substring(MyColumn, 
       CharIndex('<property name="To">', MyColumn) + 20, 
       CharIndex('</property>', MyColumn) - 
       CharIndex('<property name="To">', MyColumn) - 20 
       ) 
From MyTable 

我測試了表值,它的作品。

+0

這解決了我的問題,非常感謝您的幫助! :-) – user1297532

0
SELECT 
    CAST(command as XML).value('(/_email//property[@name="To"]/node()) [1]','nvarchar(max)') as emails 
FROM MyTable