postonoh Ответов: 4

Хотите заменить текст между двумя косыми чертами '/'


Я пытаюсь заменить текст между первыми двумя косыми чертами "/" в моем столбце данных.

У меня есть следующее, что позволяет мне получить все раньше.

Выберите ReportLocation, substring(ReportLocation, 0, Len(ReportLocation)-charindex ('/', reverse(ReportLocation)) +2) из отчета

Затем я попробовал это, которое изменяет все данные в столбце на то же самое.

Объявить @Url varchar(макс.)

SELECT   ReportLocation
        ,LEFT(ReportLocation, CHARINDEX('/', ReportLocation) - 0) AS [Surname]
        ,REPLACE(SUBSTRING(ReportLocation, CHARINDEX('/', ReportLocation), LEN(ReportLocation)), '/', 'newone') AS ReportLocation
FROM    Report
where CHARINDEX('/', ReportLocation) > 0



То, что я ищу, - это то, что может заменить текст между первыми двумя '/'

пример:

Имя Столбца: ReportLocation

запись 1 в колонке: /123/abc/987

запись 2 в столбце: /xyz/123/456/478

В записи 1 следующая должна произойти запись /123/АБВ/987. 123 следует заменить на какое имя я могу добавить, запись 2 /АБВ/123/456, XYZ должны быть должна быть заменить с какой фамилией я добавить

Спасибо большое за время.

4 Ответов

Рейтинг:
30

Oshtri Deka

Я не уверен, что вы знаете об этом, но в SQL индексы начинаются с 1, а не с 0, как в C и его преемниках.

попробуйте заменить это:

REPLACE(SUBSTRING(ReportLocation, CHARINDEX('/', ReportLocation), LEN(ReportLocation)), '/', 'newone') AS ReportLocation

с этим:
'/' + 'new value' + SUBSTRING(ReportLocation, CHARINDEX(ReportLocation, '/', 2), LEN(ReportLocation)) AS ReportLocation


postonoh

хорошо, так что это работает замена, так что один дополнительный вопрос, если я хочу удалить начиная со второго примера прямой косой черты "/123/abc/987" должен выглядеть так после этого "/abc/987

Oshtri Deka

Если я правильно вас понял, вам просто нужно пропустить первые две строки в конкатенации ('/' + 'new value'), которые оставят вам это:
Подстрока(ReportLocation, CHARINDEX(ReportLocation, '/', 2), LEN(ReportLocation)).

Надеюсь, это поможет.

Рейтинг:
1

LucasRLS

Разделите строку в массиве, замените то, что вы хотите, и снова свяжите ее со строкой...

public void Replace1(string contents, out string output)
       {
           output = "";
           if (contents.Length > 0)
           {
               //Split the content in lines
               string[] Values = contents.Split(new char[] { '\\' });
               Values[1] = "132";
               for(int i = 0; i < Values.Length; i++)
               {
                   output +=Values[i]+"\\";
               }
           }
       }


Рейтинг:
0

Afzaal Ahmad Zeeshan

Почему ты так запутался, брат?

Просто простой код C# сделал бы это, когда вы получаете доступ к данным, попробуйте получить данные, которые вы пытаетесь заменить (всю строку) в отдельной переменной. Что-то вроде

string toReplace = "/123/abc/987"; // we'll take string in variable
string[] replacedString = toReplace.Split('/');
// 1 indexer will get the second item in the above code, '123'
replacedString[1] = "Your name here...";
// above code would update that, convert it back to string and show it!


Это сделало бы его, вы можете выполнить то же самое и на второй строке. Один и тот же код будет работать на обоих и заменит второй элемент (тот, что находится между/), а затем добавит ваше пользовательское значение имени, которое вы хотите передать.


Рейтинг:
0

Vijay_Bhat

Удаляет текст между двумя символами в строке

Мой код находится внутри vb.net, но вы можете конвертировать его на любой язык
Dim content as string ="The Quick Brown Fox @ REMOVE ME IF YOU CAN # перепрыгнул через ленивую собаку

RemoveString(содержимое)

Частная функция RemoveString(content As String) как строка
Dim SPos As Integer = content.Помощи indexOf("@@")
Dim Subpos As Integer = content.IndexOf ( " ##", SPos)
Dim Remstrlength As Integer = Subpos - SPos
контент =содержание.Удалить(Охрана, Remstrlength)
содержание = содержание.Заменять("@@", "")
содержание = содержание.Заменять("##", "")
Вернуться содержанию
Конечная Функция

Вывод:"быстрая бурая лиса перепрыгнула через ленивую собаку


CHill60

Не по теме и с опозданием на 6 лет. Придерживайтесь ответа на новые сообщения. И это действительно не работает, если строка не содержит "@@" и"##", чего нет в вашем примере