Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > MS SQL.Замена части строки


Автор: ИгнатьевАлексей 23.9.2016, 14:11
Дорогие друзья, прошу помощи!

Искал сам, но ничего не получается.

БД у меня вот такая:
Microsoft SQL Server Management Studio                        10.50.1600.1

Есть таблица. Одно поле типа text, например вот такого содержания:

{"CPName":"200","EngUnitName":"qqqq","OrgUnitCode":"ОАО \"Новойл\"","TestName":"asx"}

Нужно просто заменить внутри одну часть строки на другую.
Пробую, как советуют везде команду:

Код

UPDATE [ipk].[dbo].[parameter]
SET [additional_settings] = REPLACE (additional_settings, 'Новойл', 'Новойл-2')


Но ругается так:
Argument data type text is invalid for argument 1 of replace function.

Подскажите, как быть, пожалуйста!

Автор: Akina 23.9.2016, 15:08
Цитата(ИгнатьевАлексей @  23.9.2016,  15:11 Найти цитируемый пост)
БД у меня вот такая:
Microsoft SQL Server Management Studio 

Это не БД, а программа для работы с сервером БД и данными на нём.
А вот версии сервера - не видать.

Цитата(ИгнатьевАлексей @  23.9.2016,  15:11 Найти цитируемый пост)
Есть таблица. Одно поле типа text

Точно TEXT? Не NText?

Цитата(ИгнатьевАлексей @  23.9.2016,  15:11 Найти цитируемый пост)
как быть

CAST()

Автор: ИгнатьевАлексей 23.9.2016, 15:33
Akina,

Цитата

Точно TEXT? Не NText?


В свойствах поля вижу:
Data Type  text

Но обратите внимание, как составлена строка. Как массив.


Цитата

CAST()


Как я понял, это функция преобразования типов.
А можно чуть подробнее? Как применять. Не силен я в этом.

Автор: Akina 23.9.2016, 16:21
Цитата(ИгнатьевАлексей @  23.9.2016,  16:33 Найти цитируемый пост)
обратите внимание, как составлена строка. Как массив.

Серверу по барабану, как человек или программа интерпретируют значение поля. Для него это тупая строка.

Цитата(ИгнатьевАлексей @  23.9.2016,  16:33 Найти цитируемый пост)
А можно чуть подробнее? Как применять.

Ну попробуй тупо
Код

UPDATE [ipk].[dbo].[parameter]
SET [additional_settings] = REPLACE (CAST([additional_settings] AS VARCHAR), 'Новойл', 'Новойл-2')

Автор: ИгнатьевАлексей 23.9.2016, 16:57
К сожалению, не вышло.

Я попробовал именно такое выражение, как Вы написало.
Операция прошла, но результат не тот, что ожидали:

{"CPName":"Е-9 (ПВД-1)","EngUn

Вместо замены он как то непонятно обрезал большую часть строки.

Автор: Akina 23.9.2016, 18:08
Покажи для этой записи
Код

SELECT [additional_settings] a1
     , CAST([additional_settings] AS VARCHAR) a2
     , REPLACE (CAST([additional_settings] AS VARCHAR), 'Новойл', 'Новойл-2') a3
;




Автор: ИгнатьевАлексей 24.9.2016, 14:43
Сделал для одной записи. В результате три столбца:

Первый:
{"CPName":"Е-209 (ПВД-2)","EngUnitName":"процент массовый","OrgUnitCode":"ОАО "Новойл"","TestName":"iC4 (изобутан)"}

Второй:
{"CPName":"Е-209 (ПВД-2)","Eng

Третий:
{"CPName":"Е-209 (ПВД-2)","Eng

Автор: ИгнатьевАлексей 28.9.2016, 13:18
Первый раз за 15 лет мне на этом форуме не смогли помочь, к сожалению

Автор: Garmahis 29.9.2016, 09:26
Код

SET additional_settings = CAST(REPLACE(CAST(additional_settings AS varchar(max)), 'Новойл', 'Новойл-2') AS Text)

Автор: Starikan 30.9.2016, 01:22
задавай по двум таблицам сразу параметры и будет тебе выдываться инсерт сразу в колонку с шифтом

Автор: ИгнатьевАлексей 3.10.2016, 09:31
Garmahis, 

Спасибо! Проверил через выборку. По-моему, работает.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)