2013-09-06 3 views
0

Я пытаюсь удалить все слова перед последовательной известной подстрокой («Найти»). Я хотел бы удалить все перед «Находить» навалом более 600 строк Description. Слова перед этой подстрокой различны во всех случаях. Например, (Description «Некоторые тексты, некоторые дополнительные тексты ... Чтобы найти ... Несколько дополнительных текстов») У меня есть несколько других сообщений и я попытался использовать TRIM, CHARINDEX и SUBSTRING_INDEX. Спасибо за помощь!удалить все слова перед последовательной известной подстрокой

+4

Какой у вас поставщик РСУБД? – dasblinkenlight

+0

что именно вы пробовали? Это будет возможно с помощью функций, которые вы упомянули. – dognose

+0

не уверен, что означает поставщик RDBMS ... Извините – user2755112

ответ

0

Если это SQL Server, относительно легкий способ удаления ведущих бит было бы с помощью SUBSTRING и CHARINDEX:

SELECT SUBSTRING(ColumnName, CHARINDEX('To Find a', ColumnName), 2147483647) 
FROM YourTable; 

функция CHARINDEX находит позицию подстроки, а результат используется в качестве второго ар подстроки gument. Аргумент length устанавливается в значение int, чтобы убедиться, что все оставшиеся символы в конце строки возвращены. (Вам не нужно вычислять точное число.) Если подстрока не найдена, CHARINDEX возвращает 0. В этом контексте 0 в качестве начальной позиции приводит к возврату всего строкового значения.

Если вы действительно хотите сделать наоборот, т.е. держать ведущий текст и удалить остальные, так как один из ваших комментариев, кажется, подразумевает, вы можете попробовать использовать CHARINDEX и LEFT таким образом:

SELECT LEFT(ColumnName, CHARINDEX('To Find a', ColumnName + 'To Find a') - 1) 
FROM YourTable; 

Снова CHARINDEX возвращает значение 'To Find a' в значении столбца. После вычитания 1 это становится аргументом длины LEFT. Чтобы убедиться, что CHARINDEX находит поисковый запрос, этот термин добавляется к искомому значению: если исходное значение не имеет 'To Find a', CHARINDEX попадает в прилагаемый бит и возвращает позицию после последнего символа исходной строки, которая, при вычитании, становится точной длиной строки.

0

В SQL Server, чтобы выбрать ведущий текст:

DECLARE @String AS VARCHAR(255) = 'Some Text, Some More Text…To Find a… Some More Text' 
SELECT LEFT(@String,CHARINDEX('To Find a',@String)-1) 

(Предполагая, что строка постоянно присутствует, как указано в вопросе)

Для удаления ведущих текст:

DECLARE @String AS VARCHAR(255) = 'Some Text, Some More Text…To Find a… Some More Text' 
SELECT RIGHT(@String,CHARINDEX(REVERSE('To Find a'),REVERSE(@String))-1) 

Если вы хотите сохранить «Найти», затем вы настраиваете -1 ближе к концу запроса.

Update:

Если «найти» не в каждой строке, и с помощью таблицы:

SELECT CASE WHEN CHARINDEX('To Find a',YourField) > 0 
       THEN LEFT(YourField,CHARINDEX('To Find a',YourField)-1) 
      ELSE YourField 
     END AS 'FixedField' 
FROM YourTable 
+0

Если «Найти a» является ведущим текстом @string, он столкнулся с ошибкой «Неверный параметр длины, переданный функции LEFT или SUBSTRING». – VahiD

+1

Вопрос о согласованной известной подстроке. –

+0

К сожалению, я не уверен, как использовать «DECLARE @String AS VARCHAR (255)» Чтобы быть более конкретным, у меня есть сотни видео со случайными описаниями в FIELD, называемом 'Описание'. Тем не менее, я обнаружил, что у многих есть слова «найти» в середине описания в качестве отправной точки для оставшегося описания, которое я хотел бы удалить. Начало каждого описания также отличается. Я стараюсь избегать делать это один за другим, если это возможно. Вероятно, вы уже ответили на мой вопрос, я просто не понимаю, как его реализовать. Извините за мое невежество. Спасибо за помощь! – user2755112

Смежные вопросы