Regex заменить в запросе на обновление SQL Server - PullRequest
0 голосов
/ 30 ноября 2018

Я добавил новый столбец в таблицу и хочу предварительно заполнить его.

На данный момент у меня есть это:

update Table_A
set packages = 'a:1:{i:0;a:2:{s:4:"name"; s:' + ltrim(str(len(p.name))) + ':"' + p.name + '";'+
                's:11:"category_id"; a:1:{i:0;s:1:"0";}}}'
from broker_product as Table_A
join scheme s on Table_A.scheme_id = s.id
join product p on p.id = s.product_ids
where Table_A.packages is null

Что я хочу сделать, это заполнить category_idсо значением, основанным на значениях столбца в product, в отличие от фиксированной строки, которой он является сейчас.

Пример того, что находится в product.risks:

a:2:{i:0;a:5:{s:10:"field_name";s:24:"Gadget Accidental Damage";s:19:"risk_category_value";s:4:"1.00";s:13:"variable_name";s:24:"gadget-accidental-damage";s:11:"description";s:0:"";s:10:"hover_text";s:0:"";}i:1;a:5:{s:10:"field_name";s:32:"Home Emergency Accidental Damage";s:19:"risk_category_value";s:4:"2.00";s:13:"variable_name";s:0:"";s:11:"description";s:0:"";s:10:"hover_text";s:0:"";}}

В этом примере я хотел бы, чтобы category_id было:

 a:2:{i:0;s:1:"0";i:1;s:1:"1";}

, который является массивом такой же длины, что и products.risk, со значениями i:0;s:1:"0"; для размера массива, считаяколичество элементов в product.risks.

В качестве примера я ищу что-то вроде этого (с правильным регулярным выражением, а не с разбитым материалом, который я предоставил):

update Table_A
set packages = 'a:1:{i:0;a:2:{s:4:"name"; s:' + ltrim(str(len(p.name))) + ':"' + p.name + '";'
                's:11:"category_id"; ' + preg_replace('/a:(\d+):{(i:\d+;)/', 'a:$1:{$2s:1:"0";}', p.risks) + '}}'
from broker_product as Table_A
join scheme s on Table_A.scheme_id = s.id
join product p on p.id = s.product_ids
where Table_A.packages is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...