2015-10-22 5 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> 

Я хочу использовать оператор выбора для отображения только адреса электронной почты тех, кто будет получать сообщения электронной почты. Делая это, вывод должен выглядеть следующим образом:

Пример строка 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 
Смежные вопросы