Замена значения в списке через запятую, хранящемся в столбце - PullRequest
0 голосов
/ 02 мая 2019

Это будет 1 строка кода на обычном языке программирования, но кажется слишком сложной в SQL Server.

С учетом таблицы (да нет необходимости отвечать, что значения, разделенные запятыми, не должны храниться в столбцах):

| ID |  List        |
| 1  |  AB,ABC,ABCD |

Как лучше всего заменить, например, ТОЛЬКО "AB" на "XX" и сохранить обратно в таблице?

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

Сначала добавьте запятую в конце, используя concat(), чтобы каждый элемент был заключен в запятые. Затем замените элемент, используя replace(), включая окружающие запятые. Наконец, используйте substring(), чтобы получить строку без запятых в начале и конце.

UPDATE elbat
       SET list = substring(replace(concat(',', list, ','), ',AB,', ',XX,'), 2, len(replace(concat(',', list, ','), ',AB,', ',XX,')) - 2);

дб <> скрипка

0 голосов
/ 02 мая 2019

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

DECLARE @TABLE TABLE (ID INT, List VARCHAR(100))
INSERT INTO @TABLE VALUES
(1, 'AB,ABC,ABCD')


SELECT  ID
       ,STUFF((SELECT ', ' + CAST(IIF(value = 'AB', 'XX', value) AS VARCHAR(10)) [text()]
         FROM @TABLE 
         CROSS APPLY string_split (List,',')
         FOR XML PATH(''), TYPE)
        .value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM @TABLE t

возвращает:

ID  List_Output
1    XX, ABC, ABCD
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...