Обновление строки в SQL Server - PullRequest
2 голосов
/ 09 июня 2010

В настоящее время у меня есть поле varchar. Разделитель - «$ P $ P $».

Разделитель появится в данных varchar не менее одного раза и не более двух раз.

Например.

Sample Heading$P$P$Sample description$P$P$Sample conclusion

Sample Heading$P$P$Sample Description

Если разделитель появляется дважды, мне нужно вставить текст перед вторым вхождением разделителя.

Например:

Sample Heading$P$P$Sample DescriptionINSERT TEXT HERE$P$P$Sample Conclusion

Если разделитель встречается только один раз, тогда мне нужно вставить текст в конец поля.

Например:

Sample Heading$P$P$Sample DescriptionAPPEND TEXT HERE

Как это можно сделать в SQL-запросе?

Ответы [ 3 ]

1 голос
/ 09 июня 2010

Если вы собираетесь много манипулировать строками, вы можете использовать функцию CLR (.net).Поскольку SQL Server не предназначен для работы со строками.

Или даже лучше, верните эти данные обратно в приложение и сделайте это в коде.

Я даже думаю, что вы не можете этого сделатьиспользуя стандартные функции SQL Server String

0 голосов
/ 09 июня 2010

вместо использования разделителей, почему бы не создать 3 столбца или если вам нужен только один -> поле xml?

0 голосов
/ 09 июня 2010

Функция CharIndex имеет необязательный третий параметр, который позволяет указать начальную позицию поиска. Вы можете использовать это, чтобы найти второе вхождение строки, используя CharIndex. Вы также можете использовать функцию stuff для вставки строки в другую строку.

Пример:

Declare @Temp Table(Data VarChar(8000))

Insert Into @Temp Values('Sample Heading$P$P$Sample description$P$P$Sample conclusion')
Insert Into @Temp Values('Sample Heading$P$P$Sample Description')

Select len(Data),
        CharIndex('$P$P$', Data + '$P$P$',CharIndex('$P$P$',Data) + 1),
        Stuff(Data + ' ', CharIndex('$P$P$', Data + '$P$P$',CharIndex('$P$P$',Data) + 1), 0, 'Text Here')
From   @Temp

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

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