Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Замена значений в текстовой строке  [new]
QPQPWPWEP
Guest
Здравствуйте, уважаемые форумчане.

Есть такая задача задача.
Имеется текстовая строка: '<ROOT> <B I="10100000935K03FF04829D40"></B><B I="10100000935K03FF03629E00"></B><B I="10100000935K03FF03629E00"></B><B I="10100000935K03FF03629E00"></B><B I="10100000935K03FF03629E00"></B><B I="100318DD235K04FF13329E7E"></B><B I="10100000935K03FF05029F1B"></B><B I="10100000935K03FF05029F1B"></B><B I="100318CC835K04FF04429F7C"></B><B I="100319A7735K04FF04729FB7"></B><B I="40100002135P03FF03C24B34"></B><B I="40100002135P03FF03C24B34"></B><B I="30100002135P03FF01E24BBB"></B><B I="30100002135P03FF01E24BBB"></B><B I="1002101BC35P010005024C64"></B><B I="1002101BC35P010005024C65"></B><B I="1512190FE32J210001B272B9"></B></ROOT>'
И есть таблица такого плана:
ShCode
100318CC835K04FF04429F7C
100318DD235K04FF13329E7E
100319A7735K04FF04729FB7

Так вот, выкинуть совпадающие значения в таблице из текстовой строки. К примеру, значение в таблице 100318CC835K04FF04429F7C надо выкинуть кусок из строки вида <B I="100318CC835K04FF04429F7C"></B>

Как это сделать не используя курсор, а только лишь одним запросом, ума не приложу :(
Подскажите, плиз
7 июн 11, 13:04    [10776211]     Ответить | Цитировать Сообщить модератору
 Re: Замена значений в текстовой строке  [new]
Валдай
Member

Откуда:
Сообщений: 113
SQL2008

declare @xml xml =
'<ROOT> <B I="10100000935K03FF04829D40"></B><B I="10100000935K03FF03629E00"></B>
<B I="10100000935K03FF03629E00"></B><B I="10100000935K03FF03629E00"></B>
<B I="10100000935K03FF03629E00"></B><B I="100318DD235K04FF13329E7E"></B>
<B I="10100000935K03FF05029F1B"></B><B I="10100000935K03FF05029F1B"></B>
<B I="100318CC835K04FF04429F7C"></B><B I="100319A7735K04FF04729FB7"></B>
<B I="40100002135P03FF03C24B34"></B><B I="40100002135P03FF03C24B34"></B>
<B I="30100002135P03FF01E24BBB"></B><B I="30100002135P03FF01E24BBB"></B>
<B I="1002101BC35P010005024C64"></B><B I="1002101BC35P010005024C65"></B>
<B I="1512190FE32J210001B272B9"></B></ROOT>'
declare @ShCode table (i Varchar(MAX))
insert @ShCode 
values('100318CC835K04FF04429F7C'),
('100318DD235K04FF13329E7E'),
('100319A7735K04FF04729FB7')

PRINT CAST(@xml AS VarChar(Max))

SET @xml =
'<ROOT>'+
(
SELECT *
FROM
(
  select 'B/@I'= x.I,
         'B'=''
  from 
  (
    select 
      I=t.i.value('@I','VarChar(MAX)')
    from (select [xml]=@xml) x
    cross apply x.xml.nodes('/ROOT/B') t(i)
  )x
  left join @ShCode c ON x.I=c.I
  WHERE C.i IS NULL
)R
FOR XML PATH('')
)
+'</ROOT>'

PRINT CAST(@xml AS VarChar(Max))
7 июн 11, 13:42    [10776522]     Ответить | Цитировать Сообщить модератору
 Re: Замена значений в текстовой строке  [new]
QPQPWPWEP
Guest
Спасибо огромное :)
7 июн 11, 13:59    [10776649]     Ответить | Цитировать Сообщить модератору
 Re: Замена значений в текстовой строке  [new]
nbryansky
Member

Откуда:
Сообщений: 3
Есть вариант использовать подключенный через CLR дотнетовский регэксп.
Но только если версия старше или равна 2005.
Библиотеку и примеры можно взять здесь.
http://www.codeproject.com/KB/string/SqlRegEx.aspx
Работать будет по идее быстрее чем через чистый T-SQL.
7 июн 11, 18:23    [10778623]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить